PyTorch学习DAY3模型创建与各种层

网络模型的创建

模型

模型构建两要素:构建子模块(_init_())和拼接子模块(forward())。

torch.nn

  • nn.Parameter:张量子类,表示可学习参数,如weight,bias。
  • nn.Module:所有网络层基类,管理网络属性。
  • nn.functional:函数具体实现,如卷积,池化,激活函数等。
  • nn.init:参数初始化方法。

nn.Module

  • patameters:存储管理nn.Parameter类。
  • modules:存储管理nn.Module类。
  • buffers:存储管理缓冲属性,如BN层中的running_mean。
  • ***_hooks:存储管理钩子函数。
  • 一个module可以包含多个子module。
  • 一个module相当于一个运算,必须实现forward()函数。
  • 每个module都有8个字典管理它的属性。

容器

Containers

nn.Sequential

是nn.module的容器,用于按顺序包装一组网络层。

  • 顺序性:各网络层之间严格按照顺序构建。
  • 自带forward():自带的forward里,通过for循环一次执行前向传播运算。

nn.ModuleList

是nn.module的容器,用于包装一组网络层,以迭代方式调用网络层。

主要方法:

  • append():在ModuleList后面添加网络层。
  • extend():拼接两个ModuleList。
  • insert():指定在ModuleList中位置插入网络层。

nn.ModuleDict

是nn.module的容器,用于包装一组网络层,以索引方式调用网络层。

主要方法:

  • clear():清空ModuledDict。
  • items():返回可迭代的键值对(key-value pairs)。
  • keys():返回字典的键(key)。
  • values():返回字典的值(value)。
  • pop():返回一对键值,并从字典中删除。

容器总结

  • nn.Sequential:顺序性,各网络层之间严格按顺序执行,常用于block构建。
  • nn.ModuleList:迭代性:常用于大量重复网构建,通过for循环实现重复构建。
  • nn.ModuleDict:索引性,常用于可选择的网络层。

AlexNet构建

特点如下:

  1. 采用ReLU:替换饱和激活函数,减轻梯度消失。
  2. 采用LRN(Local Response Normalization):对数据归一化,减轻梯度消失。
  3. Dropout:提高全连接层的鲁棒性,增加网络的泛华能力。
  4. Data Augmentation:TenCrop,色彩修改。


卷积

卷积运算:卷积核在输入信号(图像)上滑动,相应位置上进行乘加

卷积核:又称为滤波器,过滤器,可认为是某种模式,某种特征。

卷积过程类似于用一个模板去图像上寻找与它相似的区域,与卷积核模式越相似,激活值越高,从而实现特征提取。

AlexNet卷积核可视化,发现卷积核学习到的是边缘,条纹,色彩这一些细节模式。

卷积维度:一般情况下,卷积核在几个维度上滑动,就是几维卷积。

nn.Conv2d

功能:对多个二维信号进行二维卷积。

主要参数:

  • in_channels:输入通道数。
  • out_channels:输出通道数,等价于卷积核个数。
  • kernel_size:卷积核尺寸。
  • stride:步长。
  • padding:填充个数。
  • dilation:空洞卷积大小(有间隔的)。

  • groups:分组卷积设置。
  • bias:偏置。

尺寸计算:

简化版:

out_{size} = \frac{In_{size}-kernel_{size}}{stride} +1

完整版:

H_{out}=[\frac{H_{in}+2*padding[0]-dilation[0]*(kernel_{size}[0]-1)-1}{stride[0]}+1]

转置卷积

转置卷积又称为反卷积(Deconvolution)和部分跨越卷积(Fractionally strided Convolution),用于对图像进行上采样(UpSample)

为什么称为转置卷积?

正常卷积:

假设图像尺寸为4*4,卷积核为3*3,padding=0,stride=1

图像:I_{16*1}        卷积核:K_{4*16}     输出:O_{4*1}=K_{4*16}*I_{16*1}

转置卷积:

假设图像尺寸为2*2,卷积核为3*3,padding=0,stride=1

图像:I_{4*1}          卷积核:K_{16*4}      输出:O_{16*1}=K_{16*4}*I_{4*1}

尺寸计算:

简化版:

out_{size} =(In_{size}-1)*stride+kernel_{size}

完整版:

H_{out}=(H_{in}-1)*stride[0]-2*padding[0]+dilation[0]*(kernel_{size}[0]-1)+output_{padding}[0]+1


池化层

池化运算:对信号进行收集并总结,类似水池收集水资源,因而得名为池化层。

  • 收集:多变少
  • 总结:最大值/平均值

nn.MaxPool2d

功能:对二维信号(图像)进行最大值池化。

主要参数:

  • kernel_size:池化核尺寸
  • stride:步长
  • paddding:填充个数
  • dilation:池化核间隔大小
  • ceil_mode:尺寸向上取整
  • return_indices:记录池化像素索引

nn.AvgPool2d

功能:对二维信号(图像)进行平均值池化。

主要参数:

  • kernel_size:池化核尺寸
  • stride:步长
  • paddding:填充个数
  • ceil_mode:尺寸向上取整
  • count_include_pad:填充值用于计算
  • divisor_override:除法因子

nn.MaxUnpool2d

功能:对二维信号(图像)进行最大值池化上采样。

主要参数:

  • kernel_size:池化核尺寸
  • stride:步长
  • paddding:填充个数

线性层

线性层又称为全连接层,其每个神经元与上一层所有神经元相连实现对前一层的线性组合,线性变换。

nn.Linear

功能:对一堆信号(向量)进行线性组合

主要参数:

  • in_features:输入结点数
  • out_features:输出结点数
  • bias:是否需要偏置

计算公式:y=xW^{T}+bias

激活函数层

激活函数对特征进行非线性变换,赋予多层神经网络具有深度的意义。

nn.Sigmoid

nn.tanh

nn.ReLU

nn.LeakyReLU

  • negative_slope:负半轴斜率

nn.PReLU

  • init:可学习斜率

nn.RReLU

  • lower:均匀分布下限
  • upper:均匀分布上限

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值