卷积神经网络--LeNet的解释与实现

卷积神经网络–LeNet的解释与实现

根据《动手学习深度学习》中的卷积神经网络章节记录自己的学习笔记,下面是对LeNet的学习与理解,并用pytorch进行实践

LeNet代码理解

代码:

import torch
from torch import nn

net = nn.Sequential(
    nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Flatten(),
    nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),
    nn.Linear(120, 84), nn.Sigmoid(),
    nn.Linear(84, 10))

假设我们的输入是(1, 28, 28)的图片,框架示意图:来源于https://zh.d2l.ai/chapter_convolutional-neural-networks/lenet.html
LeNet流程图

代码理解

我们的输入是(1, 28, 28)的图片,下面开始进行每层的维度计算

  1. 输入:[1, 1, 28, 28]
  2. nn.Conv2d: 输出是6个channels,padding=(2,2),kernel=(5, 5),那么输出维度为[6, 28+22-5+1, 28+22-5+1] = [1, 6, 28, 28]
  3. nn.Sigmoid: 不改变维度,输出为[1, 6, 28, 28]
  4. nn.AvgPool2d: kernel=(2,2),stride=(2,2), 没有padding,那么输出为[6, (28-2)/2 + 1, (28-2)/2 + 1] = [1, 6, 14, 14]
  5. nn.Conv2d: 输出是16个channels,kernel=(5,5), 那么输出为[16, 14-5+1, 14-5+1] = [1, 16, 10, 10]
  6. nn.Sigmoid: 不改变维度,输出为[1, 16, 10, 10]
  7. nn.AvgPool2d: kernel=(2,2),stride=(2,2), 没有padding, 那么输出为[16, (10-2)/2 + 1, (10-2)/2 + 1] = [1, 16, 5, 5]
  8. nn.Flatten: [1, 1655] = [1, 400]
  9. nn.Linear: [1, 120]
    10.nn.Sigmoid: 不改变维度,输出为[1, 120]
  10. nn.Linear:[1, 84]
  11. nn.Sigmoid: 不改变维度,输出为[1, 84]
  12. nn.Linear:[1, 10]

总结卷积层里面维度计算的公式:
input: ( N , C , H i n , W i n ) (N, C, H_{in}, W_{in}) (N,C,Hin,Win)
output: ( N , C , H o u t , W o u t ) (N, C, H_{out}, W_{out}) (N,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂渊泉树

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值