如何对 MNIST 数据集进行迁移学习?

How to do transfer learning for MNIST dataset?

我一直在尝试使用 VGG/Inception 对 MNIST 数据集使用迁移学习。但是这两个网络都接受至少 224x224x3 大小的图像。如何将 28x28x1 MNIST 图像重新缩放为 224x224x3 以进行迁移学习?

完成您所要求的一种常见方法是简单地将图像调整为 CNN 输入层所需的所需分辨率。因为您用 , keras has a preprocessing module that allows you to load in images and optionally specify the desired size you want to scale the image by. If you look at the actual source of the method: https://github.com/keras-team/keras/blob/master/keras/preprocessing/image.py#L321 标记了您的问题,它在内部使用 Pillow 插值方法将图像重新缩放到所需的分辨率。

另外,由于MNIST的数字本来就是灰度的,所以需要将单通道图像复制成多通道图像,人为的变成RGB。这意味着红色、绿色和蓝色通道都是相同的,并且是 MNIST 灰度对应物。 load_img 方法有一个名为 grayscale 的附加标志,您可以将其设置为 False 以将图像作为 RGB 图像加载。

加载这些图像并转换为 RGB 并重新缩放后,您可以继续使用 VGG19 执行迁移学习。事实上,它已经完成了。在此处查阅此 link:https://www.analyticsvidhya.com/blog/2017/06/transfer-learning-the-art-of-fine-tuning-a-pre-trained-model/ 并查看第 6 节:使用预训练模型识别数字

我想给你一个公平的警告,即拍摄 28 x 28 图像并调整为 224 x 224 图像会产生严重的插值伪影。您将对由于上采样而包含噪声的图像数据执行迁移学习,但这就是我之前 link 编辑的博客 post 中所做的。我建议您将插值更改为 bilinearbicubic 之类的内容。默认是使用最近邻,这对于上采样图像来说很糟糕。

YMMV,所以尝试将图像调整为输入层所需的大小,并用三个通道填充图像以使其成为 RGB,看看会发生什么。

这在很大程度上取决于您希望使用的模型。在 VGGNet 的情况下,您必须将输入重新缩放到预期的目标大小,因为 VGG 网络包含 FC 层,其形状在一定数量的下采样后与图像尺寸匹配。请注意,由于参数共享,卷积层可以采用任何图像大小

然而,现代 CNN 正在跟随转向全卷积的趋势,并解决任意迁移学习的问题。如果选择此路径,请选择最新的 Inception models 之一。在这种情况下,模型外模型应该能够接受更小的 28x28x1 图像。