清华大佬终于把【PyTorch教程】给讲明白了!全程干货无废话,整整150集,还

激活函数:

上面的激活函数是不可导的,所以不能用梯度下降算法
其它激活函数:

sigmoid函数导数推导:


TanH激活函数:在RNN中使用的多




ReLU激活函数:

Relu函数导数的计算过程很简单,大于0时为1,小于0时为零


MSE (Mean Squared Error):均方差



.backward()计算梯度:


用于分类的激活函数:Softmax
soft version of max 扩大化结果差
返回值总和为1,概率






上图中lamda 为激活函数的值,E为mse均方差,t为真实值










上面的函数一般用来判断优化器的效果,函数有四个局部最优解,结果都是0
















熵: entorpy


标量:

tensor:

a.shape //shape 是属性值
a.shape[0] //返回第维度为0的大小
a.size() //size() 是函数
a.size(0) //返回维度为0的大小


a. numel() //返回tensor的大小
a.dim() //返回维度的大小



torch.tensor()
torch.Tensor()
注意:小写tensor接收数据,Tensor接收维度
torch.tensor([2,3]) //将[2,3]转换成tensor类型
torch.Tensor(2,3) //生成一个2x3的数据类型

生成未初始化数据:
Torch.empty(2,3)

tensor()函数的 默认类型为FloatTensor

设置默认类型
torch.set_default_tensor_type(torch.DoubleTensor)

设置随机初始化:
rand() //采用0~1均匀随机抽样
torch.rand(3,3 ) //生成【0,1)之间的3x3tensor

torch.rand_like(a) //生成和a的shape相同的样本

randint() 函数 [min,max)
torch.randint(min,max,[shape])

torch.randn() //正态分布(0,1) 均值为0,方差为1
torch.randn(3,3) // 生成3X3的矩阵
随机正态分布的表示法:
torch.normal(mean=xx,std=xx,)
mean :为均值, std为方差
ex:
torch.normal(mean=torch.full([10],0), std=torch.arange(1,0,-0.1))
//输出1x10 的一维tensor , 均值是[0,0,0,0,0,0,0,0,0,0], 方差是[1,0.9,0.8,,,,,0]

torch.full() :

生成等差数列:
torch.arange()

torch.linspace(0,10,steps=10)
//从[0,10】中等分出10个数
torch.logspace(0,-1,steps=10)



torch.randperm(10) //生成[0,9) 的随机打散的数



28x28的三通道图片4张
a.shape -> torch.size([4,3,28,28])
a[:2].shape //表示前两张图片
torch.size([2,3,28,28])
a[:2,:1,:,:] // 表示前两张图片的第0个通道的所有数据
a[:2,1:,:,:] //表示前两张图片中从第1通道到最末尾通道的所有数据
a[:2,-1:,:,:;] //表示前两张图片中最后一个通道所有数据

[0:28:2] //表示从【0,28)的没隔2个数采样一次

torch.index_select():


a[...].shape //三点表示任意的维度

x.ge(0.5) // 返回x中大于等于0.5的数
torch.masked_select()
https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch/

维度变换:

View 和 reshape 可以通用, reshape是后加的



unsqueeze只增加了数据的维度不改变数值


squeeze() //删除dim=1的所有维度b=torch.randn(1,32,1,1)
b.squeeze().shape -> torch.size([32])
b.squeeze(0).shape ->torch.size([32,1,1])
b.squeeze(-1).shape ->torch.size([1,32,1])

维度扩展操作:

expand 不会主动复制数据,节约内存
Repead 会复制数据
expand操作要求,只能在相同的维度上惊醒扩展,
[1,32,1,1] -> [4,32,14,14]
相同维度上只能从1到多维

上述例子中填入-1表示保存相同的维度

repeat() : 中的参数表示在每个维度上的重复次数


t() 转置操作
只能用作二维中

transpose() 进行维度转换
transpose()之后数据是不连续的,所以要用
.contiguous() 函数让它连续
transpose(1,2) , //表示将第一维和第2维进行交换


permute进行维度转换:
放入的值是原来的维度dim
eg,
b=torch.rand(4,3,28,32)
b.permute(0,2,3,1).shape ->[4,28,32,3]

