【问题标题】:Keras always predicts all 0's or all 1'sKeras 总是预测全 0 或全 1
【发布时间】:2021-02-22 07:06:31
【问题描述】:

我在预测我的模型中的全 0 或全 1 的预测函数时遇到了一些问题。这是我的模型

    model = keras.Sequential(
    [
        layers.BatchNormalization(),
        layers.Dense(200, activation="relu"),
        layers.Dense(500, activation="relu"),
        layers.Dense(1300, activation="relu"),
        layers.Dense(2000, activation="relu"),
        layers.Dense(1320, activation="relu"),
        layers.Dense(710, activation="relu"),
        layers.Dense(150, activation="relu"),
        layers.Dense(30, activation="relu"),
        layers.BatchNormalization(),
        layers.Dense(1, activation="sigmoid"),
    ]
)
model.compile(loss='binary_crossentropy', optimizer=keras.optimizers.Adam(learning_rate=(0.001)), metrics=[metrics])
history = model.fit(training, target, batch_size=2048, epochs=100, shuffle=True, validation_split=0.2)

我对深度学习非常陌生,我正在尝试创建模型来分类和获得预测。我的回答只是基于 0 或 1,这将说明客户从长远来看是要离开还是继续作为客户。我已经测试了 null 和 NaN 的数据。 我看过很多关于这可能是什么的帖子,而且在大多数情况下,人们似乎在分类而不是回归问题上使用了错误的激活函数。答案是如果你使用二元交叉熵,你应该使用 sigmoid (Why does a binary Keras CNN always predict 1?)。我认为我的网络的输出是正确的,因为我正在使用具有二元交叉熵的 ReLu 和 SigMoid,但每当我预测时,它始终是全 0 或全 1。这些层可能没有太大意义,我在这方面还很陌生,并且正在尝试了解层如何影响我训练和评估时的结果。

这大概是我对数据使用预测的方式

data = pd.read_csv("judge.csv", skiprows=range(0,0))
samples_to_predict = data.drop(['Surname', 'CreditScore', 'Geography', 'Gender', 'Tenure', 'NumOfProducts', 'HasCrCard', 'EstimatedSalary'], axis=1)
prediction = loaded_model.predict(samples_to_predict.values)
print(prediction)

我已经尝试调试了一段时间,欢迎任何有关错误可能来自哪个方向的帮助。我尝试将我的 epoch 增加到 1000,我尝试降低我的 learning_rate,我相信 BatchNormalization 可能会处理不缩放我的数据(我可能会误解),尝试降低我的 batch_size,我尝试简单地使用 3 个 Dense 层作为两个 ReLu和一个 Sigmoid,检查了我预测的数据是一个 numpy 数组,到目前为止,它们都产生了相同的预测输出全 0 或全 1 的结果。

【问题讨论】:

标签: python tensorflow keras


【解决方案1】:

事实证明,我将 predict 与未训练模型的数据类别一起使用。例如,我删除了标题为 CustomerID 的列来训练模型,但是当我进行预测时,我忘记删除使我的模型预测全 0 或全 1 的列。在解决了这个问题并确保我只使用我训练过的类别之后,我得到了不是全 0 或全 1 的预测。

【讨论】:

    猜你喜欢
    • 2019-03-17
    • 2021-03-21
    • 2019-09-07
    • 1970-01-01
    • 2016-03-14
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    相关资源
    最近更新 更多