【发布时间】:2018-02-22 19:56:24
【问题描述】:
我一直在尝试在 MNIST 上使用 keras.preprocessing.image.ImageDataGenerator() 来获取更多示例。
我在 Keras 之上使用全连接网络。在构建和编译模型之前,我首先将 3D MNIST 重塑为 4D 张量,然后使用数据增强来帮助拟合模型。
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)
model = Sequential(name="mlp")
model.add(ll.InputLayer([28, 28]))
model.add(ll.Flatten())
model.add(ll.Dense(512, kernel_regularizer=regularizers.l2(0.04)))
model.add(ll.Activation('relu'))
model.add(ll.Dense(512, kernel_regularizer=regularizers.l2(0.04)))
model.add(ll.Activation('relu'))
model.add(ll.Dense(256, kernel_regularizer=regularizers.l2(0.04)))
model.add(ll.Activation('relu'))
model.add(ll.Dense(128, kernel_regularizer=regularizers.l2(0.04)))
model.add(ll.Activation('relu'))
model.add(ll.Dense(32, kernel_regularizer=regularizers.l2(0.04)))
model.add(ll.Activation('relu'))
model.add(ll.Dense(10, activation='softmax'))
model.compile("adam", "categorical_crossentropy", metrics=["accuracy"])
gen = ImageDataGenerator(rotation_range=8, width_shift_range=0.08, shear_range=0.3,
height_shift_range=0.08, zoom_range=0.08)
test_gen = ImageDataGenerator()
train_generator = gen.flow(X_train, y_train, batch_size=64)
test_generator = test_gen.flow(X_test, y_test, batch_size=64)
...
model.fit_generator(train_generator, steps_per_epoch=60000//64, epochs=5,
validation_data=test_generator, validation_steps=10000//64)
我收到此错误:
5 model.fit_generator(train_generator, steps_per_epoch=60000//64, epochs=5,
----> 6 validation_data=test_generator, validation_steps=10000//64)
ValueError: Error when checking input: expected input_6 to have 3 dimensions, but got array with shape (256, 28, 28, 1)
但是当我省略它转换为 4d 张量时,会发生这种情况:
52 test_gen = ImageDataGenerator()
---> 53 train_generator = gen.flow(X_train, y_train, batch_size=64)
54 test_generator = test_gen.flow(X_test, y_test, batch_size=64)
ValueError: ('Input data in `NumpyArrayIterator` should have rank 4. You passed an array with shape', (50000, 28, 28))
似乎训练和测试生成器对象生成 4D 张量,但模型本身需要 3D 张量。
【问题讨论】:
-
请写型号代码
-
您的第一个错误表明您的模型是问题,而不是 ImageDataGenerator。更多细节将有助于回答您的问题。要排除的另一件小事:如果您在生成器中指定
batch_size=64,请将其放入model.fit_generator调用中。否则默认为32。这在过去给我带来了问题。 -
谢谢@DexterMorgan。我已经更新了帖子。我尝试在
fit_generator方法中使用batch_size=64,但我收到了一个意外的关键字参数错误。无论如何,为了安全起见,我将尺寸更改为全部反映 32 个批次。这不会改变错误。编辑:我还应该补充一点,该模型可以通过使用.fit方法在没有数据增强的情况下正常工作,因此问题可能是模型与 ImageDataGenerator 的兼容性,而不是模型本身。
标签: tensorflow keras