Keras: Binary_crossentropy具有负值

3 浏览
0 Comments

Keras: Binary_crossentropy具有负值

我正在按照教程这个教程(第6节:整合一切)使用自己的数据集进行操作。使用教程中提供的示例数据集,我可以成功运行示例。但是,我得到的二进制交叉熵误差是负数,并且随着迭代次数的增加没有任何改善。我相当确定二进制交叉熵应该始终是正数,并且我应该看到损失有所改善。我在下面的输出(和代码调用)中截取了5个迭代周期。有时候训练CNN时,其他人似乎也遇到类似的问题,但是我没有在我的情况下找到明确的解决方案。有人知道这是为什么吗?

示例输出:

创建TensorFlow设备(/gpu:2)- > (设备:2,名称:GeForce GTX TITAN Black,pci总线id:0000:84:00.0)

10240/10240 [==============================] - 2秒 - 损失:-5.5378 - 精确度:0.5000 - 验证损失:-7.9712 - 验证精确度:0.5000

第2个周期/5

10240/10240 [==============================] - 0秒 - 损失:-7.9712 - 精确度:0.5000 - 验证损失:-7.9712 - 验证精确度:0.5000

第3个周期/5

10240/10240 [==============================] - 0秒 - 损失:-7.9712 - 精确度:0.5000 - 验证损失:-7.9712 - 验证精确度:0.5000

第4个周期/5

10240/10240 [==============================] - 0秒 - 损失:-7.9712 - 精确度:0.5000 - 验证损失:-7.9712 - 验证精确度:0.5000

第5个周期/5

10240/10240 [==============================] - 0秒 - 损失:-7.9712 - 精确度:0.5000 - 验证损失:-7.9712 - 验证精确度:0.5000

我的代码:

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
dataset = np.loadtxt('train_rows.csv', delimiter=",")
testset = np.loadtxt('test_rows.csv', delimiter=",")
# 分割输入(X)和输出(Y)变量
X = dataset[:, :62]
Y = dataset[:, 62]
X_test = testset[:, :62]
Y_test = testset[:, 62]
### 创建模型
model = Sequential()
model.add(Dense(100, input_dim=(62,), activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
## 拟合模型
model.fit(X, Y, validation_data=(X_test, Y_test), epochs=5, batch_size=128)

0