我正在尝试使用预先训练的Imagenet权重对CIFAR10图像进行分类,以用于Inception v3 . 我使用以下代码 .
from keras.applications.inception_v3 import InceptionV3
(xtrain, ytrain), (xtest, ytest) = cifar10.load_data()
input_cifar = Input(shape=(32, 32, 3))
base_model = InceptionV3(weights='imagenet',
include_top=False,
input_tensor=input_cifar)
但它给了我一个像中间转换层的'负面维度'这样的错误 .
当我使用VGG16网络时,这不会发生 .
我正在使用keras与tensorflow后端和tf昏暗的ordernig .
2 回答
在该层的documentation中,可以发现输入的最小形状是
(150, 150, 3)
(具有tf
暗淡排序) . 你的输入要小得多 . 这个最小的大小来自多个pooling
和valid
边界模式,这使得每个层的输出更小 - 如果它小于一定的大小 - 则既不能执行池化也不能执行卷积 .初始网络在224x224大小的图像上进行训练,其下采样路径下降到10x10以下 . 因此,对于32,32,3个图像,下采样导致负尺寸大小 . 现在你可以做多件事了 . 首先,您可以将cifar10数据集中的每个图像调整为224x224,并将此张量传递到初始模型中 . 您可以删除网络的一些下采样过滤器 . 然后它仍然有效 . 第三,你可以做零填充来增加图像大小而不改变分辨率 .