当前位置 : 主页 > 网络编程 > 其它编程 >

Pytorch:激活函数及其梯度

来源:互联网 收集:自由互联 发布时间:2023-07-02
1sigmoid函数sigmoid函数曲线平滑可以很好的使用但是如果数据长时间不更新会出现失去梯度的 1sigmoid函数  sigmoid函数曲线平滑可以很好的使用但是如果数据长时间不更新会出现失去梯度的
1sigmoid函数sigmoid函数曲线平滑可以很好的使用但是如果数据长时间不更新会出现失去梯度的

1sigmoid函数

 sigmoid函数曲线平滑可以很好的使用但是如果数据长时间不更新会出现失去梯度的状况也叫梯度弥散。

求sigmoid函数的梯度

当然我们可以使用pytorch实现sigmoid函数。代码如下。

import torchatorch.linspace(-100,100,10)torch.sigmoid(a)得到结果为tensor([0.0000e00, 1.6655e-34, 7.4564e-25, 3.3382e-15, 1.4945e-05, 9.9999e-01,1.0000e00, 1.0000e00, 1.0000e00, 1.0000e00])

2Tanh函数

可以将Tanh函数视为sigmoid函数的一种线性变化所以同样存在梯度弥散的现象。

其梯度为

对于Tanh函数我们也可以通过代码实现

import torchbtorch.linspace(-1,1,10)torch.tanh(b)tensor([-0.7616, -0.6514, -0.5047, -0.3215, -0.1107, 0.1107, 0.3215, 0.5047,0.6514, 0.7616])

为了消除梯度弥散现象我们推出了Relu激活函数。

3Relu函数

 relu函数在z>0的时候梯度恒为1。

我们利用代码实现Relu函数有两种方法可以

import torchfrom torch.nn import functional as Fatorch.linspace(-1,1,10)torch.relu(a)#第一种方法tensor([0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1111, 0.3333, 0.5556, 0.7778,1.0000])F.relu(a)#第二种方法tensor([0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1111, 0.3333, 0.5556, 0.7778,1.0000])

4Mean Squared Error均方差

简写为MSE公式为Loss\sum \left ( y-\bar{y} \right )^{2}

 用程序进行对MSE的梯度计算

第一种方法使用autograd包里的函数

#模型predx*wbimport torchfrom torch.nn import functional as Fxtorch.ones(1)#x初始化为1wtorch.full([1],2)#w初始化为dim为1长度为1值为2的tensormseF.mse_loss(torch.ones(1),x*w)torch.autograd.grad(mse,[w])#对于这个模型mse接受pred[w]接收w1w2等等#但是这里会报错说w不需要求导我们求了,所以我们需要对w的数据进行更新w.requires_grad_()#对w数据进行更新torch.autograd.grad(mse,[w])#再次报错因为没有更新图mseF.mse_loss(torch.ones(1),x*w)#使用这个把图重新计算一遍torch.autograd.grad(mse,[w])

另一种方法使用loss.backward

#模型predx*wbimport torchfrom torch.nn import functional as Fxtorch.ones(1)#x初始化为1wtorch.full([1],2)#w初始化为dim为1长度为1值为2的tensormseF.mse_loss(torch.ones(1),x*w)mseF.mse_loss(torch.ones(1),x*w)#使用这个把图重新计算一遍mse.backward()#自动从后往前传播完成这条路径上所有的需要梯度的tensor的计算计算后的grad不会再返回出来w.grad#输出tensor[2.])

5Cross Entropy Loss常用于二分类多分类

使用二分类

          多分类

          和softmax激活函数同时使用

6softmax适用于多分类

我们把数据分类时的出现频率转化为概率把概率最大的情况作为我们的预测值当我们使用softmax函数进行压缩为概率时还应要求所有出现的情况加起来概率等于1。而sigmoid不太准确会出现加起来等于3的情形。

softmax函数求导时

当ij时

 当i不等于j的时候

使用代码实现softmax

#softmaximport torchfrom torch.nn import functional as Fatorch.rand(3)#随机生成dim为1长度为3的tensora.requires_grad_()#标注一下grad函数pF.softmax(a,dim0)torch.autograd.grad(p[1],[a],retain_graphTrue)torch.autograd.grad(p[2],[a])#结果为# (tensor([-0.1537, -0.0906, 0.2443]),)

上一篇:LookInsideGDSII
下一篇:没有了
网友评论