PyTorch中已经实现了神经网络中可能用到的各种激活函数,我们在代码中只要直接调用即可。至于激活函数的基本公式和原理查看相关历史文章https://blog.csdn.net/weixin_65875490/article/details/157329671?spm=1011.2124.3001.6209https://blog.csdn.net/weixin_65875490/article/details/157329671?spm=1011.2124.3001.6209

一、Sigmoid函数

函数和其导数图像相关代码:

import torch
import matplotlib.pyplot as plt

x = torch.linspace(-10,10,100,requires_grad=True)
fig,ax = plt.subplots(1,2)  #创建一个画布
fig.set_size_inches(12,4)  #设置画布大小
ax[0].plot(x.data,torch.sigmoid(x).data,"purple")  #绘制sigmoid曲线
ax[0].set_title("sigmoid")  #设置标题
ax[0].spines['top'].set_visible(False)  #隐藏上边界
ax[0].spines['right'].set_visible(False)  #隐藏右边界
ax[0].axhline(0.5,color="gray",alpha = 0.7,linewidth=1)  #绘制水平线,颜色为灰色,透明度为0.7,线宽为1
ax[0].axhline(1,color="gray",alpha = 0.7,linewidth=1)  #绘制水平线,颜色为灰色,透明度为0.7,线宽为1

torch.sigmoid(x).sum().backward()   #反向传播
ax[1].plot(x.data,x.grad.data,"purple")  #绘制导数曲线
ax[1].set_title("sigmoid'(x)")  #设置标题
ax[1].spines['top'].set_visible(False)  #隐藏上边界
ax[1].spines['right'].set_visible(False)  #隐藏右边界
ax[1].spines['left'].set_position('zero')  #设置y轴位置
ax[1].spines['bottom'].set_position('zero')  #设置x轴位置
ax[1].set_ylim(0,0.3)   #设置y轴范围
plt.show()

二、ReLU函数

函数和其导数图像相关代码:

import torch
import matplotlib.pyplot as plt

x = torch.linspace(-5,5,1000,requires_grad=True)    #创建数据
fig,ax = plt.subplots(1,2)    #创建画布
fig.set_size_inches(12,4)    #设置画布大小
ax[0].plot(x.data,torch.relu(x).data,"purple")    #绘制ReLU曲线
ax[0].set_title("ReLU")    #设置标题
ax[0].spines['top'].set_visible(False)    #隐藏上边界
ax[0].spines['right'].set_visible(False)    #隐藏右边界
ax[0].spines['left'].set_position('zero')    #设置y轴位置
ax[0].spines['bottom'].set_position('zero')    #设置x轴位置

torch.relu(x).sum().backward()    #反向传播
ax[1].plot(x.data,x.grad.data,"purple")    #绘制导数曲线
ax[1].set_title("ReLU'(x)")    #设置标题
ax[1].spines['top'].set_visible(False)    #隐藏上边界
ax[1].spines['right'].set_visible(False)    #隐藏右边界
ax[1].spines['left'].set_position('zero')    #设置y轴位置
ax[1].spines['bottom'].set_position('zero')    #设置x轴位置
plt.show()

三、Softmax函数等

更多推荐