一、初始Pytorch卷积模块
1、卷积神经网络基本结构
(1)输入层
一般输入层的大小应该是能够以被2整出多次的,常用的数字包括32,64,96,224。可以将图片缩放到常用尺寸,进行输入
(2)卷积层
应该尽可能使用小尺寸的滤波器,比如3×3或5×5,滑动步长1。还有一点就是需要对输入数据进行零填充,这样可以有效的保证卷积层不会改变输入数据体的空间尺寸。如果必须使用更大的滤波器尺寸如7×7,通常用在第一个面对原始图像的卷积层上。
(3)池化层:
负责对输入的数据空间维度进行下采样,常用的设置使用2×2的感受野,步长设置为2。池化层的感受野大小很少超过3。因为这回导致池化过程过于激进,造成特征信息的丢失,使得算法性能变差。
(4)零填充
零填充的使用可以让卷积层的输入和输出在空间上的维度保持一致。除此之外,如果不使用零填充,在不断进行卷积过程中,数据的尺寸会不断减少,造成图像边缘信息的的损失。
2、Pytorch中常用卷积模块
(1)卷积层:nn.Conv2d()
参数 | 含义 |
---|---|
in_channels | 输入数据的深度(图片的通道数) |
out_channels | 输出数据的深度(卷积后输出结果的通道数(神经元个数)) |
kernal_size | 卷积核的形式。可以用一个数字表示高和宽相等的卷积核,如kernal size=3;高和宽不同的卷积核,可以表示为kernal size=(3,2) |
stride | 卷积每次移动的步长。默认为1 |
padding | 处理边界时使用零填充的像素点个数。默认为1 |
dilation | 采样间隔数量,默认为1,表示无间隔采样 |
group | 输入与输出通道的分组数量。默认为1(全连接) |
bisa | 是一个布尔值,默认为True,表示有偏置项 |
(2)池化层:nn.MaxPool2d()
- nn.MaxPool2d()表示网络中的最大池化
参数 | 含义 |
---|---|
kernel_size | 最大池化操作时的窗口大小 |
stride | 最大池化操作时窗口移动的补偿,默认值是kernel_size |
padding | 输入的每一条边补充0的层数 |
dilation | 用于控制窗口中元素的步长 |
return_indices | 表示是否返回最大值所处的下表,默认为return indices=False |
ceil_mode | 默认为False。如果等于True。在计算输出大小时,将采用向上取整来代替默认的向下取整 |
- nn.AvgPool2d()表示均值池化,里面的参数和nn.MaxPool2d()类似,但多一个参数count_include_pad,这个参数表示计算均值的时候是否包含零填充,默认为True
3、构建简单的多层卷积神经网络
(1)代码实现
import numpy as np
import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#定义简单的四层神经网络
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN,self).__init__() #输入图像维度 b,3,32,32
#定义第一层网络:卷积+激活+池化
layer1 = nn.Sequential()
layer1.add_module('conv1'