深度学习框架Pytorch——学习笔记(七)常用损失函数和神经网络优化方法,激活函数简述

深度学习框架Pytorch——学习笔记(七)常用损失函数和神经网络优化方法,激活函数简述

优化方法参考地址 https://www.leiphone.com/news/201706/e0PuNeEzaXWsMPZX.html

网络的可学习参数 net.parameters()

for parameters in net.parameters():
	print(parameters)
使用 net.named_parameters()  可同时返回可学习参数和名称

loss损失函数在nn中常用的都包含,是类的方式,先定义后使用
优化器在torch.optim中 , 传入 net.parameters() 网络的参数

常用的损失函数

(x,y)L1loss
nn.L1Loss()
x与y的差的绝对值

在这里插入图片描述

(x,y)均方损失
nn.MSELoss()
x与y的差的平方和

在这里插入图片描述

用于多分类的负对数似然损失
nn.NLLLoss()

在这里插入图片描述

用于多分类的交叉熵损失
nn.CrassEntropyLoss()
logsoftmax与MLLloss的结合

在这里插入图片描述

(x,y)二进制交叉熵
nn.BCELoss()
用前需要在前面加上sigmoid函数

在这里插入图片描述

三种优化算法

优化器的作用就是用来更新梯度的。
SGD随机梯度下降	
RMSprop快速梯度下降
Adam自动

SGD随机梯度下降算法,带有动量的可选参数

optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)

RMSprop算法,可以减小某些维度梯度更新波动较大的情况,使其梯度下降的速度变得更快

optimizer = torch.optim.RMSprop(model.parameters(), lr=0.01, alpha=0.99)

Adam 自动更新梯度,一般使用默认值即可

optimizer = torch.optim.Adam(model.parameters())

常见激活函数

神经网络无非是每层的矩阵相乘,其关系是线性的。无论怎么改变,其得到的信息没有太大的差距。所以需要激活函数引入非线性因素,使得神经网络可以任意逼近任何非线性函数,增加了模型泛化的特性。
sigmoid函数 (放弃)

深度学习框架Pytorch——学习笔记(七)常用损失函数和神经网络优化方法,激活函数简述_第1张图片
输出在(0,1),把输入变换为0到1之间的输出。
需要进行指数运算,比较慢,且不利于权重优化。
目前基本上只有在做二元分类(0,1)时的输出层才会使用。

tanh函数 (放弃)

深度学习框架Pytorch——学习笔记(七)常用损失函数和神经网络优化方法,激活函数简述_第2张图片
输出区间是在(-1,1)之间,以0为中心。
随着Relu的出现所有的隐藏层基本上都使用relu来作为激活函数了

ReLU (最常用)

深度学习框架Pytorch——学习笔记(七)常用损失函数和神经网络优化方法,激活函数简述_第3张图片
a=max(0, x) 导数大于0时1,小于0时0。
当输入是负数的时候,ReLU是完全不被激活的.
但是实际的运用中,该缺陷的影响不是很大。

Leaky ReLU函数 (不一定好用)

深度学习框架Pytorch——学习笔记(七)常用损失函数和神经网络优化方法,激活函数简述_第4张图片
a=max(zx, x) z=0.01
理论上来讲,Leaky ReLU有ReLU的所有优点,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

你可能感兴趣的:(pytorch,深度学习)