python - Keras:Binary_crossentropy 具有负值

标签 python keras

我正在关注 this tutorial (第 6 节:将它们全部结合在一起),以及我自己的数据集。使用提供的示例数据集,我可以使教程中的示例正常运行。

我得到一个负的二元交叉熵错误,并且随着时间的推移没有任何改进。我很确定二元交叉熵应该总是正的,我应该会看到损失有所改善。我已将下面的示例输出(和代码调用)截断为 5 个时期。其他人在训练 CNN 时似乎有时会遇到类似的问题,但在我的案例中没有看到明确的解决方案。有谁知道为什么会这样?

示例输出:

Creating TensorFlow device (/gpu:2) -> (device: 2, name: GeForce GTX TITAN Black, pci bus id: 0000:84:00.0)
10240/10240 [==============================] - 2s - loss: -5.5378 - acc: 0.5000 - val_loss: -7.9712 - val_acc: 0.5000
Epoch 2/5
10240/10240 [==============================] - 0s - loss: -7.9712 - acc: 0.5000 - val_loss: -7.9712 - val_acc: 0.5000
Epoch 3/5
10240/10240 [==============================] - 0s - loss: -7.9712 - acc: 0.5000 - val_loss: -7.9712 - val_acc: 0.5000
Epoch 4/5
10240/10240 [==============================] - 0s - loss: -7.9712 - acc: 0.5000 - val_loss: -7.9712 - val_acc: 0.5000
Epoch 5/5
10240/10240 [==============================] - 0s - loss: -7.9712 - acc: 0.5000 - val_loss: -7.9712 - val_acc: 0.5000

我的代码:

import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.callbacks import History

history = History()
seed = 7
np.random.seed(seed)

dataset = np.loadtxt('train_rows.csv', delimiter=",")

#print dataset.shape (10240, 64)

# split into input (X) and output (Y) variables
X = dataset[:, 0:(dataset.shape[1]-2)] #0:62 (63 of 64 columns)
Y = dataset[:, dataset.shape[1]-1]  #column 64 counting from 0

#print X.shape (10240, 62)
#print Y.shape (10240,)

testset = np.loadtxt('test_rows.csv', delimiter=",")

#print testset.shape (2560, 64)

X_test = testset[:,0:(testset.shape[1]-2)]
Y_test = testset[:,testset.shape[1]-1]

#print X_test.shape (2560, 62)
#print Y_test.shape (2560,)

num_units_per_layer = [100, 50]

### create model
model = Sequential()
model.add(Dense(100, input_dim=(dataset.shape[1]-2), init='uniform', activation='relu'))
model.add(Dense(50, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
## Fit the model
model.fit(X, Y, validation_data=(X_test, Y_test), nb_epoch=5, batch_size=128)

最佳答案

我应该打印出我的响应变量。类别被标记为 1 和 2 而不是 0 和 1,这混淆了分类器。

关于python - Keras:Binary_crossentropy 具有负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42264649/

相关文章:

python - Keras 中的 RMSE/RMSLE 损失函数

python - 我可以根据另一列中值的更改时间创建新列吗?

Python 模块位置

python - 获得 model.predict_generator 的测试精度

python - Bokeh 中的无限水平线

python - 在keras中使用2d内核执行1d卷积

python - Keras根据阈值将中间层的输出设置为0或1

python : correct use of set_completion_display_matches_hook

python - 仅当验证准确性提高时,我如何才能保存/覆盖我的 TensorFlow/Keras 模型?

python - LSTM 返回具有 Sigmoid 激活的概率序列