【学习笔记】【Pytorch】九、非线性激活
- 学习地址
- 主要内容
- 一、前言
- 二、Pytorch的非线性激活
- 三、nn.ReLU类的使用
- 1.使用说明
- 2.代码实现
- 二、nn.Sigmoid类的使用
- 1.使用说明
- 2.代码实现
学习地址
PyTorch深度学习快速入门教程【小土堆】.
主要内容
一、前言
我们知道人类大脑中的神经元之间的连接只有在电信号达到每一阈值后才会被激活,激活函数就是模仿这一机制的一个阈值函数。
如果我们的神经网络只使用线性激活函数,则无论多深的网络最终输出也不过是所以输入的简单线性组合,这并不具有拟合任意函数的能力,因此我们需要引入非线性激活函数。
非线性激活函数一般接在全连接层、卷积层、循环层的后面,用以选择性地激活神经网络中的神经元,同时起到限制每个神经元输出值的范围的作用。
激活函数是加入非线性因素,线性并不能很好的拟合现实的情况,加入非线性因素可以增强拟合能力,提高泛化能力。
二、Pytorch的非线性激活
参考:torch.nn
- 二分类输出层用sigmod,多分类用softmax,隐藏层用ReLu。
- input形状要求任意数量维度。
三、nn.ReLU类的使用
from torch.nn import ReLU
官方解释
作用:对输入运用ReLU函数。
1.使用说明
【实例化】ReLU(inplace: bool = False)
- 作用:创建一个实例。
- inplace:将input变成output值,input保持不变。
2.代码实现
import torch
from torch import nn
from torch.nn import ReLU
class Model(nn.Module):
def __init__(self) -> None:
super().__init__()
self.relu1 = ReLU() # 创建一个实例
def forward(self, input):
output = self.relu1(input)
return output
input = torch.tensor([[1, -0.5],
[-1, 3]])
print(input.shape)
model = Model() # 创建一个实例
output = model(input)
print(output)
输出:
torch.Size([2, 2])
tensor([[1., 0.],
[0., 3.]])
二、nn.Sigmoid类的使用
from torch.nn import Sigmoid
1.使用说明
官方解释
2.代码实现
import torch
import torchvision
from torch import nn
from torch.nn import Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
class Model(nn.Module):
def __init__(self) -> None:
super().__init__()
self.sigmoid1 = Sigmoid() # 创建一个实例
def forward(self, input):
output = self.sigmoid1(input)
return output
dataset = torchvision.datasets.CIFAR10(root="./dataset", train=False,
transform=torchvision.transforms.ToTensor()) # 创建实例
dataloader = DataLoader(dataset, batch_size=64) # 创建实例
model = Model() # 创建一个实例
step = 0
writer = SummaryWriter("./dataloader_logs") # 创建实例
for data in dataloader:
imgs, targets = data
writer.add_images("input", imgs, step)
output = model(imgs) # 父类__call__
# 池化后,通道数不会变,不用reshape
writer.add_images("output", output, step)
step += 1
writer.close()
# tensorboard命令:tensorboard --logdir=dataloader_logs --port=6007
TensorBoard输出: