我正在尝试Merku分子活性挑战,并创建了训练和测试数据集。
数据的形状如下:
x_train.shape=(1452, 4306)
y_train.shape=(1452, 1)
x_test.shape=(363, 4306)
y_test.shape=(363, 1)
我已经使用Dense
层来定义模型,如下所示:
model = Sequential()
model.add(Dense(100, activation="relu", input_shape=(4306,)))
model.add(Dense(50, activation="relu"))
model.add(Dense(25, activation="relu"))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(1))
# Compile the model
model.compile(
loss='categorical_crossentropy',
optimizer="adam",
)
model.summary()
# Train the model
model.fit(
x_train,
y_train,
batch_size=300,
epochs=900,
validation_data=(x_test, y_test),
shuffle=True
)
在尝试上面的代码时,发生以下错误:
ValueError: Input 0 is incompatible with layer flatten_23: expected min_ndim=3, found ndim=2
如何解决此错误?
答案 0 :(得分:2)
只需移除展平层:
model = Sequential()
model.add(Dense(100, activation="relu", input_shape=(4306,)))
model.add(Dense(50, activation="relu"))
model.add(Dense(25, activation="relu"))
model.add(Dropout(0.25))
model.add(Dense(1))
发送到顺序层的数据本质上是一维的(忽略批处理列),因此没有任何内容可以展平。进入展平层的数据已经是一维。
编辑-用于回归:
分类交叉熵不适用于回归的成本函数,您需要使用均方误差,该误差通常用于所有回归任务:
model.compile(
loss='mse',
optimizer="adam",
)