我正在使用转移学习(vgg16)学习图像分类,并且正在使用内置的keras时尚mnist数据集。
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
要预处理vgg16的数据,我通过从keras.applications.vgg16导入preprocess_input来使用以下命令
X_train = preprocess_input(x_train)
X_test = preprocess_input(x_test)
train_features = vgg16.predict(np.array(X_train), batch_size=256, verbose=1)
test_features = vgg16.predict(np.array(X_test), batch_size=256, verbose=1)
但是我收到以下错误
ValueError: Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (60000, 28, 28)
我正在使用keras2.2.4,pip 19.0.3
答案 0 :(得分:0)
Fashion mnist数据集具有灰度图像,这意味着它只有一个深度的通道,VGG16是由具有3个深度的RGB图像训练的。根据您的错误,不能将VGG16与单通道输入一起使用。要将VGG16用于时尚mnist数据集,您必须将图像读取为三个通道。您可以使用np.stack
如下进一步处理X_train
和X_test
:
import numpy as np
X_train = np.stack((X_train,)*3, axis=-1)
X_test = np.stack((X_test,)*3, axis=-1)
答案 1 :(得分:0)
VGG接受的最小值为32,最大值为224,here可以看出,为了重塑它,我们可以做到
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(),而无需将其转换为张量数据并编写生成器。