Keras分子活性模型

时间:2019-05-20 18:18:57

标签: python keras neural-network keras-layer

我正在尝试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

如何解决此错误?

1 个答案:

答案 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",
)