Pytorch教程入门系列7----网络结构

系列文章目录



前言

今天开始介绍Pytorch的又一重点内容网络结构,这是自己搭建网络的前提,即搞清楚网络是由哪些基本结构组成的,识别各个网络。


一、网络结构是什么?

网络结构是神经网络尤其指深度神经网络的基本结构,各种网络结构的有机组合就能完成神经网络的搭建。

二、网络结构有哪些?

常见的网络结构从输入到输出,一般有如下几种结构:
输入层、卷积层、改进层、全连接层等。下面逐一说明Pytorch的实现

1.输入层即数据集准备层

#构建batch数据
data = torch.utils.data.DataLoader 
module.train() 
#数据放入模型中                            
output = module(data)

2.卷积层

输出维度是自定义的,每个维度的图尺寸是需要计算的公式如下W2 = [(W1-K+2P)/S]+1
小核、分组、空洞都有减参的效果
代码如下(示例):

假定输入为 (32, 28, 28),32通道,28*28大小
nn.Conv2d(
                in_channels=32,             # 输入维度
                out_channels=64,            # 输出要多少个特征图,可自己设定
                kernel_size=5,              # 卷积核大小,一般357。奇数为了能中心对齐
                stride=1,                   # 步长即滑动窗口
                padding=2,                  # 边缘填充,如果希望卷积后大小跟原来一样,需要设置padding=(kernel_size-1)/2 前提 stride=1
            	dilation=1,					# 空洞卷积默认为1,即不进行空洞
            	groups=1,					# 分组卷积,默认为1,即只分1组,不进行拆分
            	bias= True					# 偏置,默认添加偏置
            ),                              # 输出的特征图为 (64, 28, 28

3.改进层

改进层不是一种操作的简称,而是对卷积之后的弊端改进的各种操作的统称,非必须,视情况选择使用。

分为以下几种操作:
非线性化、减参、缓解过拟合、缓解梯度消失或不收敛

下面分情况讨论

1、非线性化(激活函数)ReLU

目的是:事物不是线性发展的,即不可能一线到底,神经网络进行智能拟合就必须是非线性的,卷积操作是线性的加减乘除,因此需要卷积之后加入非线性变化也成激活函数
Pytorch中有众多激活函数API,介绍主要的几种

import torch.nn as nn
	nn.Conv2d()#在卷积之后紧跟激活函数
 	nn.ReLU()#最常用,以下三选一
 	nn.Sigmod()
 	nn.LeakyReLU()
 	

2、减参MaxPool

提示:如果在卷积的操作中使用了减参手段,那么卷积之后可以省略再减参
目的是:过多的参数是的神经网络很难训练,因此在保证训练精度的前提下,可以现在Pooling(c池化)减参
Pytorch中有众多池化API,介绍主要的几种

扫描二维码关注公众号,回复: 14816703 查看本文章
import torch.nn as nn
	nn.Conv2d()#在卷积之后紧跟激活函数
 	nn.ReLU()#最常用
 	nn.MaxPool2d()#以下2选一
 	nn.AvgPool2d()

3、缓解过拟合Dropout

目的是:神经网络在训练的数据集上表现很好,在测试集上表现很差,我们的模型在训练集上拟合事物的时候拟合太过,对测试集上的离群点很难去接近,因此我们要缓解过拟合,当然我们现在只在模型构建层面来讨论缓解过拟合的方法。
Pytorch中缓解过拟合的API,主要介绍的是Dropout

import torch.nn as nn
	nn.Dropout2d(0.5)#以0.5的概率关闭神经元,以期使其它神经元能挑更多担子

4、缓解梯度饱和BN

目的是:神经网络的层数不断加深,在训练的过程会出现训练不收敛情况,浅层参数的微弱变化经过多层线性变换与激活函数后会被放大,改变了每一层的输入分布,造成深层的网络需要不断调整以适应这些分布变化,最终导致模型难以训练收敛。将卷积层的输入分布归一化,以解决此类问题
Pytorch中缓解梯度消失的API,介绍主要的几种

    >>> from torch import nn
    # 使用BN层需要传入一个参数为num_features,即特征的通道数
    >>> bn = nn.BatchNorm2d(64)
    # eps为公式中的 є, momentum为均值方差的动量,affine为添加可学习参数
    >>> bn
    BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)

4.全连接层

这一层主要通过全连接的方式,将卷积后的数据同目标数据做映射转化,突出特点是连接紧密,参数非常多,占到全部参数的3-6成。
tensor转为1维向量,也就固定了其上下游通道数,不利于图像尺度的扩展,基本不在加该层。

torch.nn.Linear(in, out)

总结

以上就是今天要讲的内容,本文简单介绍了神经网络的各种结构层的使用,希望大家能够准确识别各种模型的每一层。接下来我们来一起看看如何将各种层组合在一起搭建成模型。

猜你喜欢

转载自blog.csdn.net/weixin_46417939/article/details/128214209