系列文章目录
PyTorch深度学习——Anaconda和PyTorch安装
Pytorch深度学习-----数据模块Dataset类
Pytorch深度学习------TensorBoard的使用
Pytorch深度学习------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Compose,RandomCrop)
Pytorch深度学习------torchvision中dataset数据集的使用(CIFAR10)
Pytorch深度学习-----DataLoader的用法
Pytorch深度学习-----神经网络的基本骨架-nn.Module的使用
Pytorch深度学习-----神经网络的卷积操作
Pytorch深度学习-----神经网络之卷积层用法详解
Pytorch深度学习-----神经网络之池化层用法详解及其最大池化的使用
文章目录
- 系列文章目录
- 一、非线性激活是什么?
- 二、ReLU函数
- 1.ReLU函数介绍
- 2.使用Relu函数处理矩阵
- 三、Sigmoid函数
- 1.Sigmoid函数介绍
- 2.使用Sigmoid函数处理CIFAR10数据集
一、非线性激活是什么?
非线性激活是神经网络中的一种操作,它被用于引入非线性特性到神经网络的输出中。在神经网络中,线性操作如加法和乘法只能产生线性变换,而非线性激活函数则允许网络学习非线性关系
。
在每个神经元的输出中应用非线性激活函数,可以使得神经网络能够学习和表示更加复杂的函数关系
。这是因为非线性激活函数可以对输入数据进行非线性映射
,从而增加了网络的表达能力。
常见的非线性激活函数包括sigmoid函数、ReLU函数、tanh函数等。
英文为:Non-linear Activations;官网解释为:Non-linear Activations
二、ReLU函数
1.ReLU函数介绍
首先先查看官网对其解释:如下图所示
可以见到有一个参数inplace,布尔类型,所以具有两种情况
当inplace 为True时,会将输入数据进行替换;当inplace 为False时,输入数据不进行替换
。
即:input=-1 经过 Relu(input,inplace=True)后,input=0;
input=-1 经过 Relu(input,inplace=False)后,input=-1;
即将小于0的数据替换为0
由官网的图像可以推测,Relu函数的表达式为
因为input=-1时小于0,故替换为0.
其次:relu函数也是分段线性函数。
2.使用Relu函数处理矩阵
import torch# 准备数据
input = torch.tensor([[1,-1],[-2,3]])# 搭建自己的一个神经网络
class lgl(torch.nn.Module):def __init__(self):super(lgl, self).__init__()# 默认inplace参数为Falseself.relu1 = torch.nn.ReLU()def forward(self,input):output = self.relu1(input)return output# 实例化
l = lgl()
output = l(input)
print(input)
print(output)
输出结果如下:
tensor([[ 1, -1],[-2, 3]])
tensor([[1, 0],[0, 3]])
验证结果,由Relu函数的特点,进行relu后会将小于等于0的数值替换为0,大于0的数值保持不变,故上述结果正确。同时inplace默认是False,故输入不会改变。
下面将inplace=True
import torch# 准备数据
input = torch.tensor([[1,-1],[-2,3]])# 搭建自己的一个神经网络
class lgl(torch.nn.Module):def __init__(self):super(lgl, self).__init__()# 同时将inplace参数设置为Trueself.relu1 = torch.nn.ReLU(inplace=True)def forward(self,input):output = self.relu1(input)return output# 实例化
l = lgl()
output = l(input)
print(input)
print(output)
输出结果如下:
tensor([[1, 0],[0, 3]])
tensor([[1, 0],[0, 3]])
三、Sigmoid函数
1.Sigmoid函数介绍
首先先查看官网,对其解释如下图所示
函数表达式如下
函数取值范围为(0,1)
2.使用Sigmoid函数处理CIFAR10数据集
代码如下:
import torch
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter# 准备cifar10数据集
test_set = torchvision.datasets.CIFAR10("dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)
# 加载器
dataloader = DataLoader(test_set,batch_size=64)# 搭建自己的神经网络
class Lgl(torch.nn.Module):def __init__(self):super(Lgl, self).__init__()self.sigmoid1 = torch.nn.Sigmoid()def forward(self, input):output = self.sigmoid1(input)return output# 实例化
l = Lgl()# 进行sigmoid函数化,并在TensorBoard中显示
writer = SummaryWriter("logs_test")
step = 0
for data in dataloader:imgs, target = data# 未进行sigmoid函数前图片显示writer.add_images("input",imgs,step)output = l(imgs)# 进行sigmoid函数化后图片显示writer.add_images("output",output,step)step = step + 1writer.close()
对比如下图所示: