【发布时间】:2020-02-25 15:26:56
【问题描述】:
我正在尝试使用 Keras 的拟合生成器来拟合 ConvNet 模型,但是在尝试将数据提供给输入层时它失败了。它告诉我它期待一个三维输入,但我的输入只有两个。如果我在我的输入形状中添加一个通道,它会要求四个维度。
这是我不添加通道参数时的确切错误:
ValueError: Error when checking input: expected input_1 to have 3 dimensions, but got array with shape (1000, 597)
当我将输入形状更改为 (1000, 597, 1) 时:
ValueError: Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (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
还有我的健康生成器:
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])
值得注意的是,我的生成器的输出符合预期,形状正确。
非常感谢
【问题讨论】:
-
你的目标形状是什么?
-
请提供完整的错误
-
请提供生成器代码,为什么需要重塑层??
-
@IoannisNasios 卷积网络的目标形状是 (1000, 1)
-
@Mukul 正如其他人指出的那样,重塑是我的一个错误,它已从示例代码中删除
标签: python machine-learning keras deep-learning conv-neural-network