如何进行MNIST数据集的转移学习?

问题描述 投票:3回答:2

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

machine-learning tensorflow deep-learning keras mnist
2个回答
3
投票

做你要问的一个常见方法是简单地将图像大小调整到输入层进入CNN所需的所需分辨率。因为您使用标记了您的问题,所以keras有一个预处理模块,允许您加载图像并可选择指定想要缩放图像的所需大小。如果你看一下方法的实际来源:https://github.com/keras-team/keras/blob/master/keras/preprocessing/image.py#L321,它在内部使用Pillow插值方法将图像重新缩放到所需的分辨率。

此外,由于MNIST数字最初是灰度,因此您需要将单通道图像复制到多通道图像中,以便人为地成为RGB。这意味着红色,绿色和蓝色通道都是相同的,并且是MNIST灰度对应的。 load_img方法有一个名为grayscale的附加标志,您可以将其设置为False以将图像加载为RGB图像。

将这些图像加载到RGB并重新缩放后,您可以继续使用VGG19执行传输学习。事实上,它已经完成过。请在此处查看此链接: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的图像会产生严重的插值伪影。您将对包含由于上采样引起的噪声的图像数据执行传输学习,但这是我之前链接的博客文章中所做的。我建议你将插值更改为bilinearbicubic。默认设置是使用最近邻居,这对于上采样图像非常糟糕。

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.