【问题标题】:Constant Accuracy/Loss in Keras NNKeras NN 中的恒定精度/损失
【发布时间】:2019-11-10 10:53:49
【问题描述】:

我正在学习深度学习,并在 kaggle 上实现了巨大的挑战。

在预处理中,我删除了 Pid、姓名、机票和客舱列。我通过添加相应的方法替换了 Fare 和 Age 列中的空值。我有一个热门编码性别,Pclass(乘客类)和登船港口。添加了一个单独的列来确定乘客是否单独旅行(从兄弟姐妹和父母计算)。最后我使用了 scikit 的 MinMaxScalar。

这是使用的 keras 模型。

model = Sequential()
model.add(Dense(32, input_dim=13, activation="relu"))
model.add(Dense(64, activation="relu"))
model.add(Dense(128, activation="relu"))
model.add(Dense(256, activation="relu"))
model.add(Dropout(0.3))
model.add(Dense(512, activation="relu"))
model.add(Dense(1024, activation="relu"))
model.add(Dense(512, activation="relu"))
model.add(Dropout(0.3))
model.add(Dense(1024, activation="relu"))
model.add(Dense(2048, activation="relu"))
model.add(Dense(1024, activation="relu"))
model.add(Dropout(0.3))
model.add(Dense(512, activation="relu"))
model.add(Dense(1024, activation="relu"))
model.add(Dense(512, activation="relu"))
model.add(Dropout(0.3))
model.add(Dense(256, activation="relu"))
model.add(Dense(128, activation="relu"))
model.add(Dense(64, activation="relu"))
model.add(Dense(32, activation="relu"))
model.add(Dropout(0.3))
model.add(Dense(1, activation="sigmoid"))
model.compile(optimizer="Adam", loss='binary_crossentropy', metrics=["binary_accuracy"])

val_binary_accuracy 在整个过程中是一个常数 0.6425

【问题讨论】:

  • 这个模型方式对于 Titanic 数据集来说太复杂了,试着只使用几层。另外,请出示您的model.fit

标签: python tensorflow keras deep-learning


【解决方案1】:

这在“relu”中很常见。

“Relu”有一个“常数零”区域。如果任何层恰好完全落在该区域中,则您的模型已失效。

您可以尝试以下方法之一:

  • 再次创建模型(如果您有随机种子,请更改种子)
  • 降低学习率(但你好像用的不是很大)
  • 使用不同的激活方式(“tanh”、“sigmoid”等)
  • 在层之后和relu之前使用BatchNormalization

【讨论】:

    猜你喜欢
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2018-07-26
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多