激活函数
激活函数用来加入非线性因素,解决线性模型所不能解决的问题
原始激活函数:阈值函数(大于0为1,小于0为0)
缺点不可导
改进激活函数:
- sigmoid(0~1之间)
优点是可导且易导:
缺点是会在两端会出现长时间loss保持不变
torch.sigmoid(a)
- Tanh
常用于RNN - ReLU
目前使用最多,起到奠基作用的激活函数,一般做研究优先使用ReLU激活函数
优点:减少了梯度爆炸和梯度离散的情况
torch.relu(a)
- Softmax
用预测分类,每个值都在0~1之间,且和为1
求导:
i=j是正的,其它时是负的
p=F.softmax(a,dim=0)
torch.autograd.grad(p[1],[a],retain_graph=True)
Loss及其梯度
MSE:均方误差
Cross Entropy Loss:交叉熵
loss求导:
- torch.autograd.grad(loss,[w1,w2,…]
In [55]: x=torch.ones(1)
In [56]: w=torch.full([1],2)
In [57]: w.requires_grad_()
Out[57]: tensor([2.], requires_grad=True)
In [63]: mse=F.mse_loss(torch.ones(1),x*w)
In [64]: torch.autograd.grad(mse,[w])
Out[64]: (tensor([2.]),)
- loss.backward()
mse=F.mse_loss(torch.ones(1),x*w)
mse.backward()
w.grad
反向传播
来源:CSDN
作者:酸菜余
链接:https://blog.csdn.net/weixin_43821376/article/details/103810617