LeNet
整个网络的框架,定义网络LeNet
(Conv1)3*32*32---> 16*28*28(Pool1)--->16*14*14(Conv2)--->32*10*10(Pool2)--->32*5*5
(Fc1)--->120(Fc2)--->84(Fc3)--->10
利用pytorch搭建一个LeNet网络
LeNet是一个经典的卷积神经网络(Convolutional Neural Network,简称CNN),由Yann LeCun等人在1998年提出。它是第一个成功应用于手写数字识别的深度学习模型。
LeNet的结构相对简单,包含两个卷积层和三个全连接层。每个卷积层都使用小的卷积核对输入图像进行卷积操作,并通过池化层提取特征。全连接层将池化层的输出连接到最终的输出层,用于分类任务。
我们训练的图象是彩色RGB的 也就是32*32*3,原图是灰度图像是 32*32*1
pytorch Tensor 的通道排序 B,C,H,W
batch一批图像的个数,channe(图片的深度)l=3 height = 32 width = 32
在卷积操作中,输入数据与卷积核进行卷积运算时,卷积核的通道数(channel)应该与输入数据的通道数相同。
这是因为卷积操作是逐通道进行的。每个通道的输入数据与相应通道的卷积核进行卷积运算,得到一个输出通道的特征图。因此,为了完成逐通道的卷积运算,卷积核的通道数应该与输入数据的通道数一致,这样每个通道都可以使用对应的卷积核进行卷积操作,产生相应通道的输出特征图。
在LeNet模型中,第一个卷积层的输入通道数为3(表示RGB彩色图像的3个通道),输出通道数为16。这意味着该卷积层将对每个通道分别应用16个不同的卷积核,产生16个输出通道的特征图。
AlexNet
定义网络
3*224*224(Conv1)--->96*55*55(Pool1)--->96*27*27(Conv2)--->256*27*27(Pool2)--->
256*13*13(Conv3)--->384*13*13(Conv4)--->384*13*13(Conv5)--->256*13*13(Pool3)--->
256*6*6(Fc1)--->2048(Fc2)--->2048(Fc3)--->1000(输出节点个数可自定义)
网络的特色
使用GPU进行训练 ,使用Relu激活函数,以及在全连接层使用DropOut方法随机减少一部分节点,从而减少网络训练参数,抑制过拟合
网络介绍
过拟合的定义
Dropout方法
Padding 补0的方法
nn.ZeroPad2d((1,2,1,2)) 左侧1列右侧两列上方1行下方两行
tuple(1,2) 上下一行,左右两行
VGG
定义VGG网络
Conv size = 3 padding = 1 stride = 1
maxpool size = 2 padding = 0 stride = 2
Outsize = [inputsize - Kernelsize + 2(P1+P2)]/stride + 1
3*224*224(Conv1,Conv2)--->64*224*224(Pool1)--->64*112*112(Conv3,Conv4)--->128*112*112
(Pool2)--->128*56*56(Conv5,Conv6,Conv7)--->256*56*56(Pool3)--->256*28*28
(Conv8,COnv9,Conv10)--->512*28*28(Pool4)--->512*14*14(Conv11,Conv12,Conv13)--->
512*14*14(Pool4)--->512*7*7(Fc1)--->4096(Fc2)--->4096(Fc3)--->1000(输出节点)
作者尝试不同组合的网络以及是否使用LRN,我们一般常用的是 D 的配置
16weight layers :13 Conv + 3FullConnection,
网络特色
通过堆叠多个3*3的卷积核来替代大尺度卷积核(减少网络所需的训练参数)
堆叠两个3*3的卷积核替代5*5的卷积核,堆叠三个3*3的卷积核替代7*7的卷积核,拥有相同的感受野
Conv size = 5 padding = 1 stride = 1
举个例子 3*224*224 通过一次5*5大小的卷积核进行卷积 (224 - 5 + 2)/1 + 1
网络介绍1
感受野的概念
从注意力机制的角度 我们看一图片,中间部分是清晰的,周围是模糊的,从CNN网络的角度我们在网络传输一个图片 周围加padding和不加padding也是不同的效果,
我的理解是 对于一个图片,经过不加padding的卷积他们的感受野是相同的,
但是通过更少的参数运算会减少过拟合的效果,预测的结果更精确
感受野的理解5x5做一次3x3的卷积,不加padding就是3x3的结果,再卷一次就是单个值。
图像分为三层,底层是5*5的像素,中间层是3*3,最上层是1*1
首先对底层使用一个3*3的filter(这是第一个filter),过activation,进入3*3的中间层,我们又用了一个3*3的filter(这是第二个filter),最后获得了一个像素,所以这里我们一共用了2个filter。
而假使我们是直接对底层(5*5)使用一个5*5的filter,那我们直接就可以获得一个像素。
综上,为了达到一样的目的,我们使用了2个串联3*3的filter,哪怕我们计算的次数多了一些,但是避免了过拟合,减少了参数并且与5*5达到了一样视野,所以这样多出来的计算应该是合算的。
在
步距stride默认是1 Ksize = 3 通过堆叠3*3的卷积核替代大的卷积核 3*3*1(Conv1)
为什么通过堆叠3*3的卷积核替代大尺度的卷积核会减少训练参数
在卷积神经网络中,每个卷积核的参数数量等于卷积核的大小乘以上一层神经元的通道数,再加上一个偏置项。因此,一个 5x5 的卷积核参数数量要比两个 3x3 的卷积核总和多。
7*7*C--->7*7*C channel = C (卷积核的个数C)
第一个C代表输入特征矩阵的深度,第二个C代表 卷积核的个数C