【发布时间】: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 的结果。
【问题讨论】:
-
什么是
judge.csv?它没有在您的代码中的任何地方定义。请查看如何创建minimal, reproducible example。
标签: python tensorflow keras