Python 3.x 图像预处理在vgg16中不起作用

Python 3.x 图像预处理在vgg16中不起作用,python-3.x,keras,vgg-net,imagenet,Python 3.x,Keras,Vgg Net,Imagenet,我正在使用迁移学习(vgg16)学习图像分类,我正在使用keras的内置时尚mnist数据集 (x_列,y_列),(x_测试,y_测试)=时尚列表加载数据() 为了预处理vgg16的数据,我通过从keras.applications.vgg16导入preprocess_输入,使用了以下命令 X\u列=预处理输入(X\u列) X_测试=预处理_输入(X_测试) train\u features=vgg16.predict(np.array(X\u train),批处理大小=256,详细度=1)

我正在使用迁移学习(vgg16)学习图像分类,我正在使用keras的内置时尚mnist数据集

(x_列,y_列),(x_测试,y_测试)=时尚列表加载数据()
为了预处理vgg16的数据,我通过从keras.applications.vgg16导入preprocess_输入,使用了以下命令

X\u列=预处理输入(X\u列)
X_测试=预处理_输入(X_测试)
train\u features=vgg16.predict(np.array(X\u train),批处理大小=256,详细度=1)
test\u features=vgg16.predict(np.array(X\u test),batch\u size=256,verbose=1)
但是我得到了下面的错误

ValueError:检查输入时出错:预期输入_1有4个维度,但得到了具有形状的数组(60000,28,28)

我使用的是keras2.2.4,PIP19.0.3,Fashion mnist数据集有灰度图像,这意味着它只有一个通道的深度,并使用RGB图像进行训练,其中有3个通道的深度。根据您的错误,您不能将VGG16与单通道输入一起使用。要将VGG16用于fashion mnist数据集,必须将图像作为三个通道读取。您可以使用以下方法进一步处理
X_列车
X_测试


VGG接受的最小值为32,最大值为224,可以看出,要改变这一点,我们可以这样做

x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) # converting it to (,28x28x1)
x_train = np.pad(x_train, ((0,0),(2,2),(2,2),(0,0)), 'constant',constant_values=(0, 0)) # converting it to min (,32x32x1)
x_train = np.stack((x_train,)*3, axis=-1) # (,32,32,1,3)
x_train = x_train[:,:,:,0,:] # (,32,32,1)
y_train = keras.utils.to_categorical(y_train, num_classes)
这可以轻松地用于keras中的.fit()、.evaluate()和.predict(),而无需将其转换为张量数据并编写生成器

x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) # converting it to (,28x28x1)
x_train = np.pad(x_train, ((0,0),(2,2),(2,2),(0,0)), 'constant',constant_values=(0, 0)) # converting it to min (,32x32x1)
x_train = np.stack((x_train,)*3, axis=-1) # (,32,32,1,3)
x_train = x_train[:,:,:,0,:] # (,32,32,1)
y_train = keras.utils.to_categorical(y_train, num_classes)