我在预测模型中预测全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)我已经尝试调试了一段时间,任何关于错误可能来自哪个方向的帮助都将是受欢迎的。我试着将我的纪元增加到1000,我试着降低我的learning_rate,我相信BatchNormalization可能会注意到不缩放我的数据(我可能误解了这一点),试着降低我的batch_size,我试着简单地使用3个密集层是两个ReLu和一个Sigmoid,检查我预测的数据是一个numpy数组,到目前为止它们都产生了预测输出全0或全1的相同结果。
发布于 2021-02-26 04:24:29
事实证明,我正在使用预测与我没有用来训练模型的数据的类别。例如,我有一个标题为CustomerID的专栏,我为了训练模型而删除了它,但当我预测时,我忘记了删除让我的模型预测全0或全1的那一列。在解决了这个问题并确保我只使用我训练它的类别进行预测后,我得到的预测并不全是0或全1。
https://stackoverflow.com/questions/66311351
复制相似问题