PyTorch resnet18实现MNIST手写数字识别

本文是作者学习PyTorch ResNet18实现MNIST手写数字识别的过程记录,通过研究ResNet论文和源码,探讨了ResNet网络结构,并解决了输入尺寸不匹配的问题。在实践过程中,作者遇到并修复了网络层输出尺寸错误和参数不匹配的错误。
摘要由CSDN通过智能技术生成

PyTorch resnet18实现MNIST手写数字识别

Warning: 这是一个学习笔记及分享向的文章, 对于初学者可能不太友好

最近突然出现了一个疑问, 用了ResNet等主流主干网络这么久, 也知道每个网络最基本的原理, 比如ResNet是利用H(x)=F(x)+x恒等变换让网络易于训练, 在有downsample的层将x进行变换匹配F(x)之后的size, 但是具体是怎么实现的呢?抱着这个疑问, 在重新阅读了ResNet这篇论文之后, 把官方源码研究了一遍。花了大概一个星期的时间, 终于把源码中和ResNet这篇论文相关的部分都理解透彻了。

不得不说源码的作者是真的牛逼, 看完感觉自己写代码的能力又增加了(增加了, 但没有完全增加, 只增加了一点点)

最后写完了resnet18等几个函数后, 想找点数据来练练手。第一时间我想到了MNIST, 在印象中MNIST的图片是 28* 28* 1 的, 但是resnet18接收的是3通道的RGB图片。于是乎, 我写了以下这段代码:

model = resnet18(num_classes=10)

img = torch.Tensor(1, 3, 28, 28)
output = model(img)

然后就得到了以下的输出:
(输出部分是我在自己重写的代码里面加入了print(), 源码中没有输出每层的output.size())

>>> inputs: torch.Size([1, 3, 28, 28])
>>> conv1 -> maxpool: torch.Size([1, 64, 7, 7])
>>> layer1: torch.Size([1, 64, 7, 7])
>>> layer2: torch.Size([1, 128, 4, 4])
>>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值