《动手学深度学习 pytorch版》代码笔记——第5-8章

本文深入解析卷积神经网络CNN的关键概念,包括randn()与rand()函数的作用、统一数据类型的必要性及LeNet模型结构。通过具体实例,阐述CNN在图像处理中的应用,如边缘检测和特征提取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第五章 卷积神经网络

知识点1:randn() 与 rand()

函数作用
np.random.randn()从标准正态分布中返回一个或多个样本值
np.random.rand(m, n)生成m行n列的均匀分布的伪随机数

知识点2:统一数据类型

  • 描述: 5.1.3 图像中物体边缘检测中,第一个小例子会出现 expected backend CPU and dtype Float but got backend CPU and dtype Long 的报错。
  • 解决:X的数据类型统一下就可以了,添加 X = torch.tensor(X, dtype=torch.int64)
  • 具体原因和装饰器@torchsnooper.snoop()的使用,参考 《动手学深度学习 pytorch版》代码笔记——第1-4章

知识点3:LeNet 模型
在这里插入图片描述
网络结构如上,简单梳理下结构:

  • 输入(32,32)→卷积核 6个(5,5)/stride=1/padding=0→输出特征图 6个(28,28)
  • 输入6个(28,28)→池化 6个(2,2)/stride=2/padding=0→输出特征图 6个(14,14)
  • 输入6个(14,14)→卷积核 16个(5,5)/stride=1/padding=0→输出特征图 16个(10,10)
  • 输入16个(10,10)→池化 6个(2,2)/stride=2/padding=0→输出特征图 16个(5,5)
  • 输入16个(5,5)→卷积核 120个(5,5)/stride=1/padding=0(相当于全连接层)→输出个数120 →全连接层
  • 输出个数84→全连接层 输出个数10

书上给出的代码是这样的:
在这里插入图片描述
红色框处有个疑问:

卷积神经网络CNN原理详解

  • 有一点需要明确:该层虽然代码写成全连接层,但模型图中实际是卷积层(C5层),但因为恰好输入维度5x5,卷积核也是5x5,因此特征图大小为(5-5+1)×(5-5+1)= 1×1。这样该层就刚好变成了全连接,这只是巧合,如果原始输入的图像比较大(不是32x32了),那该层就不是全连接了。

7.27更
例子中使用的是28*28的灰度图像(感谢评论区同学的解惑),所以:

  • 输入(28,28)→卷积核 6个(5,5)/stride=1/padding=0→输出特征图 6个(24,24)
  • 输入6个(24,24)→池化 6个(2,2)/stride=2/padding=0→输出特征图 6个(12,12)
  • 输入6个(12,12)→卷积核 16个(5,5)/stride=1/padding=0→输出特征图 16个(8,8)
  • 输入16个(8,8)→池化 6个(2,2)/stride=2/padding=0→输出特征图 16个(4,4)
  • 输入16个(4,4)→卷积核 120个(5,5)/stride=1/padding=0(相当于全连接层)→输出个数120 →全连接层
  • 输出个数84→全连接层 输出个数10
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值