Dim=d,将d维度合并,合并时只允许d上的维数不相等,其他都要相等
eg:A[4.4.32],B[3,6,32],要是再Dim=0上拼接就不对
因为4!=6
stack会创建新的维度(即为新的概念)。但是两个维度必须完全一样
Dim=d,将d维度合并,合并时只允许d上的维数不相等,其他都要相等
eg:A[4.4.32],B[3,6,32],要是再Dim=0上拼接就不对
因为4!=6
stack会创建新的维度(即为新的概念)。但是两个维度必须完全一样
repeat里面是重复的次数
不再是shape本身,而是重复的次数
transport函数之后要紧接着,contiguous变成连续的;例如:transpose(1,3).contiguous().view(4,3*32*32).view(4,32,32,3)
.view相当于numpy.resize
permute可以自动调动transpose
把维度为1的挤压,即Dim==1
squeeze,shape==1挤掉,shape!=1不变
rand随机初始化--可以均匀采样
torch.randint(1,10,[3,3])---1:最小值;10:最大值;[3,3]--list
randn--正态分布
torch.randn(3,3)----N(0,1)--均值=0;方差=1
生成等差数列:torch.arange(0,10,2)
即为tensor[0,2,4,6,8]
不包含10
eye是单位阵
randperm:随机打散
生成随即索引
tensor是接受现成数据的
Tensor OR FloatTensor--接受(数据维度)shape的生成未初始化的数据:Torch.empty()
Torch.FloatTensor(d1,d2,d3)
Torch.IntTensor(d1,d2,d3)
Dim3:---适合RNN网络结构
[10,20,100]---20句话,每句话有10个单词,每个单词用100维表示
Dim4:适合图片CNN
[2,3,28,28]---有2张照片,每张照片有3个通道,长宽28*28
[b,c,h,w]
one_hot--变成string类型
用数字来表示语言--Word2vec OR glove
need to know :
1. torch.FloatTensor
2.torch.DoubleTensor
3.torch.ByteTensor
4.torch.LongTensor
1.3 是0维,但是[1.3]就是1维,长度为1的tensor
求出的值和真值的差:loss
doenload=True意思是如果电脑里面没有的话就回去自动下载
ToTenser---把numpy格式转成tenser
noemalize---正则化过程
batch_size---一次加载的图片数量
网络求出的值与真实值之间是有一个误差的,通过误差来求梯度,更新权值
一般来说,网络最后一层选用的激活函数不会是ReLU
label=(0,9)既然要的是0-9的数字识别,那么0-9每个数字就是一个维度,用1表示。
H3=[1.,1]---第一个1表示照片数量;第二个1就是数字的维度(就是0-9的一个数字),也就是1
ReLU:非线性函数,输入的和<0,纵轴为0,>0Y轴为输入的和
在每一个线性函数上添加一个非线性函数ReLU(激活函数)----即非线性函数叠加在其表达能力更强
argmax()函数来做预测
H1=XW1+b1
b1=dx 为偏置
H1的维度:比如X是一张28*28的图片,那么就是784个像素信息,可以把X理解为[1,784],
dx是图片的维度
W1=[d1,dx],那么H1*W1=[1,784]*[d1,784]^T(转置)因为要满足矩阵相乘原则
XW1=[1,d1]
H1=[1,d1]+[d1]==[1,d1] —— 等于H1变量的维度
@为矩阵相乘
因为有N个点,所以在求导的时候先除以N
深度学习主要思想:梯度下降算法!!!!!
梯度下降的精髓!:x'=x-x处的导数的值*学习速度lr
然后用得出的x'在进行下一次计算,一次一次的迭代
!!lr:表示学习的速度
lr的值要是过大的话,就会在最优解的附近有一个较大的波动。但是,希望的是在最优解附近有较小的波动
常用网络层:
nn.Linear
nn.Conv2d卷积
nn.LSTM
nn.ReLU
nn.Sigmoid
nn.Softmax
nn.CrossEntropyLoss
nn.MSE