(9) pytorch之池化层、全连接层、激活函数层

一、池化层:对信号进行收集并总结。

(目标:冗余信息的提出,减少后面的信息量)
收集:多变少
总结:最大值/平均值(max/average)
在这里插入图片描述

1 nn.MaxPool2d(功能对二维信号-图像进行最大池化)

在这里插入图片描述
常见参数:kernel_size:池化核尺寸
stride:步长(应该与池化核尺寸相同,防止重叠所以也为一个元组)
padding:填充个数
dilation:池化核间隔大小
ceil_mode:尺寸像上(True)/(false默认)下取整
return_indices:记录池化像素索引
在这里插入图片描述
当把maxpool取出的像素如果想扩充,则根据return_indices记录的索引放置

2 nn.AvgPool2d(功能对二维信号-图像进行平均池化)

主要参数:kernel_size:池化核尺寸
stride:步长(应该与池化核尺寸相同,防止重叠所以也为一个元组)
padding:填充个数
ceil_mode:尺寸像上(True)/(false默认)下取整
count_include_pad:填充值是否要用于计算均值
divisor_override:除法因子(分母如果不想用n可以用这个自己设置)

3 nn.MaxUnpool2d(反池化层):对二维信号进行最大值上采样(根据索引填充)

在这里插入图片描述
主要参数:kernel_size:池化核尺寸
stride:步长
padding:填充个数
使用的时候,要将输入(池化层得到的东西)和索引indices(由maxpool2d获得)作为参数,
unmaxpool=nn.MaxUnpool2d((2,2),(2,2))
unmaxpool(池化层得到的东西,indices)得到后面的
在这里插入图片描述

二、线性层(全连接层):每个神经元与上一层所有神经元相连

在这里插入图片描述
nn.Linear()
在这里插入图片描述
主要参数:
in_features:输入结点数
out_features:输出结点数
bias:是否需要偏置
模型参数设置:
linear_layer.weight.data=torch.tensor(神经矩阵)
linear_layer.bias.data.fill_(1.)
在这里插入图片描述

三、激活函数层:使特征进行非线性变化,然多层神经网络有更深层次意义

nn.sigmoid()
输出在(0,1)间
导数范围[0,0.25]易导致梯度消失
输出为非零均值,破坏数据分布

nn.sigmoi()
输出在(-1,1)符合0均值
导数范围(0,1),一定程度减轻了梯度消失问题(深了还是会消失)

nn.ReLU()
输出均为正数,但会导致负半轴死神经元
导数是1,缓解梯度消失,但易导致梯度爆炸
改进变形:
leakyReLU():负半轴增加了一个很小的斜率negative——slope
PReLU():负半轴为可学习斜率init
RReLU():负半轴为从均匀分布中随机取斜率(上界upper,下界lower)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的卷积神经网络的两全连接层的Python实现: ```python import torch import torch.nn as nn class ConvNet(nn.Module): def __init__(self): super(ConvNet, self).__init__() # 定义卷积,输入通道数为1,输出通道数为6,卷积核大小为5x5 self.conv1 = nn.Conv2d(1, 6, kernel_size=5) # 定义池化层,池化核大小为2x2,步长为2 self.pool = nn.MaxPool2d(kernel_size=2, stride=2) # 定义卷积,输入通道数为6,输出通道数为16,卷积核大小为5x5 self.conv2 = nn.Conv2d(6, 16, kernel_size=5) # 定义全连接层,输入节点数为16*5*5,输出节点数为120 self.fc1 = nn.Linear(16 * 5 * 5, 120) # 定义全连接层,输入节点数为120,输出节点数为10(这里是10分类问题) self.fc2 = nn.Linear(120, 10) def forward(self, x): # 前向传播 x = self.pool(torch.relu(self.conv1(x))) x = self.pool(torch.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = torch.relu(self.fc1(x)) x = self.fc2(x) return x ``` 在这个实现,我们定义了一个名为`ConvNet`的类,它继承自`nn.Module`。我们在`__init__`方法定义了卷积池化层全连接层的结构,并在`forward`方法实现了前向传播的过程。在前向传播过程,我们首先进行两次卷积和池化操作,然后将结果展平成一维向量,再通过两个全连接层进行分类。 需要注意的是,这个实现的卷积池化层全连接层都是PyTorch已经定义好的,我们只需要在`__init__`方法进行实例化即可。在`forward`方法,我们使用了PyTorch已经定义好的激活函数(ReLU)和损失函数(CrossEntropyLoss)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值