照着教程【实战 VGG实现kaggle猫狗图片分类】完整流程 | 提供VGG11,VGG13,VGG16,VGG19 Pytorch 代码写了一下午。做一下学习笔记。
模型如下
关于报错
第一反应去看评论区,没人提到这个问题,应该是我手残打错了。再看看报错信息,提示两个矩阵不能相乘。按照我浅薄的理解,因为模型的输入需要一个固定的大小,我们应该是在初始化MyDataset的时候就已经把输入图片的矩阵resize成(224, 224)的形状了。
前面这个32应该是我设置的batch_size没错。但是问题来了,224*224=50176,这和上面的四个数字都没有直接关系,正好是100352的一半。再看看后面这个数字,25088=512*7*7,512是最后一个卷积层的输出维度,这没有问题。
突然在注意到VGG 11的定义。
再一看我的网络,怎么只有13层,果然少了一个block,加上后正好输出的通道数再翻一番。这样就是100352了。
现在的模型是这样的:
为什么要用Xavier做初始化
为什么要resize成(224*224)?是怎么resize的?
为什么每经过一个block,通道数都要(会)翻倍?
5.7. 使用重复元素的网络(VGG) — 《动手学深度学习》 文档
Why VGG-16 takes input size 512 * 7 * 7?
neural network - Why VGG-16 takes input size 512 * 7 * 7? - Stack Overflow