公司做推广做网站好还是,俄文网站引擎,网络公司业务范围,国际知名设计公司收入1 LeNet结构 主要是为了手写数字识别
具体结构讲解#xff1a;从图中例子可得
1 先传入一个灰度图像尺寸为1x28x28#xff0c;通道数为1#xff0c;尺寸为28x28的灰度图像
2 第一层5x5卷积#xff0c;经过公式 输入图像尺寸-卷积核尺寸2padding/步长1#xff0c;#…1 LeNet结构 主要是为了手写数字识别
具体结构讲解从图中例子可得
1 先传入一个灰度图像尺寸为1x28x28通道数为1尺寸为28x28的灰度图像
2 第一层5x5卷积经过公式 输入图像尺寸-卷积核尺寸2padding/步长1其中因为是正方形所以长宽都一样直接一个式子得出因为没有padding输出特征图20个通道24x24的尺寸。
3 经过第二层Pooling层计算方式同上得到20x12x12
4 在经过第三层5x5卷积输出50x8x8
5 第四层Polling得到50x4x4
6 扁平化然后reshape为500x1的神经元用于全连接也可以把上述得到的进行扁平化再进行一次全连接800 -500
7 然后Relu激活函数
8 全连接输出 10x1代表十个数字的置信度
9 使用softmax来计算输出的值的在0-9的概率
上述其实上述每一层卷积都要使用Relu激活函数下面代码复现再具体看
2 代码复现
import torch
import torch.nn as nnclass LeNet(nn.Module):def __init__(self) - None:super().__init__()self.features nn.Sequential(nn.Conv2d(in_channels1, out_channels20, kernel_size5, stride1, padding0),nn.ReLU(),nn.MaxPool2d(kernel_size(2, 2), stride2),nn.Conv2d(in_channels20, out_channels50, kernel_size5, stride1, padding0),nn.ReLU(),# nn.MaxPool2d(kernel_size(2, 2), stride2),nn.AdaptiveMaxPool2d((4, 4)) # 这个是为了不止让限制为28x28的输入图像)self.classify nn.Sequential(nn.Linear(50 * 4 * 4, 500),nn.ReLU(),nn.Linear(500, 10))def forward(self, x):z self.features(x)z z.view(-1, 800)z self.classify(z) return zif __name__ __main__:net LeNet()img torch.randn(2, 1, 28, 28)scores net(img)print(scores)probs torch.softmax(scores, dim1)print(probs)3 LeNet5
结构图 1 C1层
C1层是一个卷积层
将输入的1x32x32 通过5x5卷积卷积成 6x28x28的feature map 2 S2层 S2层是一个下采样层对C1层的进行下采样,把6x28x28池化成6x14x14 和max pooling和average pooling不一样 在C1中每个单元的4个输入相加 乘以一个可训练参数w 再加上一个可训练偏置b 结果通过sigmoid函数计算得到最终池化之后的值 就是说对于C1层每个2x2的区域进行相加类似如使用2x2卷积步长为2然后每个区域4个值乘以一个可训练参数w 再加上一个可训练偏置b 结果通过sigmoid函数计算得到最终池化之后的值 3 C3层 C3层是一个卷积层使用的是5x5卷积把6x14x14卷积成16x10x10
但是这个卷积跟平常卷积不一样使用的是类似分组卷积的东西不过也不一样如下图 每次卷积核每次卷积不同的通道来提取特征得到15个通道比如第一个通道卷积他的前三层通道来输出第一个通道以此类推 4 S4层 S4层是一个下采样层 (和S2一样)具体看S2,把16x10x10下采样为16x5x5
5 C5层 C5层是一个卷积层使用5x5卷积把16x5x5卷积成120x1x1也就是用于下面全连接 6 F6 F7层 F6 7层是一个全连接层
把120x1最后全连接为10x1用来做置信度