我在尝试使用Keras的fit_generator来训练一个卷积神经网络模型,但当试图将数据输入到输入层时失败了。它告诉我期望一个三维输入,但我的输入只有二维。如果我给输入形状添加一个通道,它又要求四个维度。
这是我在不添加通道参数时的确切错误:
ValueError: 错误检查输入时:期望input_1具有3个维度,但得到形状为(1000, 597)的数组
当我将输入形状改为(1000, 597, 1)时,错误再次出现:
ValueError: 错误检查输入时:期望input_1具有4个维度,但得到形状为(1000, 597)的数组
这是我的模型代码:
def initialise_model(): input_layer = Input((1, 1000, 597)) conv_layer_1 = Conv2D(filters=30, kernel_size=(10, 1), strides=(1, 1), padding="same", activation="relu")(input_layer) conv_layer_2 = Conv2D(filters=30, kernel_size=(8, 1), strides=(8, 1), padding="same", activation="relu")(conv_layer_1) conv_layer_3 = Conv2D(filters=40, kernel_size=(6, 1), strides=(6, 1), padding="same", activation="relu")(conv_layer_2) conv_layer_4 = Conv2D(filters=50, kernel_size=(5, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_3) conv_layer_5 = Conv2D(filters=50, kernel_size=(5, 1), strides=(1, 1), padding="same", activation="relu")(conv_layer_4) flatten_layer = Flatten()(conv_layer_5) dense_layer = Dense(1024, activation="relu")(flatten_layer) label_layer = Dense(1024, activation="relu")(dense_layer) output_layer = Dense(1, activation="linear")(label_layer) model = Model(inputs=input_layer, outputs=output_layer) adam_optimiser = keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08) model.compile(optimizer=adam_optimiser, loss="mean_squared_error", metrics=["accuracy", "mean_squared_error"]) return model
这是我的fit_generator代码:
model = initialise_model()early_stopping = EarlyStopping(monitor="val_loss", min_delta=0, patience=0, verbose=1, restore_best_weights=True)model.fit_generator(generator, epochs=1, steps_per_epoch=1, verbose=2, callbacks=[early_stopping])
值得注意的是,我的生成器的输出是预期的,具有正确的形状。
非常感谢
回答:
将我们的输入层设置为
input_layer = Input((1, 1000, 597))
或者如果通道设置在最后
input_layer = Input((1000, 597, 1))
并确保你的生成器输出的x_train数据形状为
(batch_size, 1, 1000, 597)
或者
(batch_size, 1000, 597, 1)