【问题标题】:Keras Model for Molecular ActivityKeras 分子活动模型
【发布时间】:2019-05-20 18:18:56
【问题描述】:

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

我该如何解决这个错误?

【问题讨论】:

  • Like this-model.add(Dense(100, activation = "relu", input_shape=(4306,), batch_size=300, input_size=6252312))

标签: python keras neural-network keras-layer


【解决方案1】:

只需移除 flatten 层:

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))

发送到顺序层的数据本质上是一维的(忽略批处理列),因此没有什么可以展平的。进入flatten层的数据已经是1D了。

编辑——回归:

分类交叉熵不是回归的合适成本函数,您需要使用均方误差,它通常用于所有回归任务:

model.compile(
    loss='mse',
    optimizer="adam",
)

【讨论】:

  • 谢谢你,先生,y 是一个 numpy 数组,里面有很多浮点数。 to_categorical() 用于将类转换为数字以进行分类,但它是回归方法。你能帮我吗..
  • 如果它的浮点数,你的目标是回归吗?或者您是否尝试分类为离散类?
  • 是的,先生,这是回归-根据分子的重量,可以预测分子活性
  • 其实就是Merku分子活动挑战赛
  • 好吧,不需要编码 y 向量。我虽然你在做分类,因为你使用'categorical-crossentropy作为损失函数。将为回归编辑帖子
猜你喜欢
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
相关资源
最近更新 更多