2017-02-16 18 views
4

私は自分のデータセットでthis tutorial(セクション6:すべて一緒に繋げる)に従っています。私はチュートリアルでサンプルを手に入れることができます。問題はなく、サンプルデータセットを用意しました。Keras:Binary_crossentropyに負の値があります

私はバイナリ・クロスエントロピー・エラーが発生していますが、それは負であり、エポックが進むにつれ改善はありません。私はバイナリクロスエントロピーが常に正でなければならないと確信しています。そして、損失の改善が見られるはずです。私は以下のサンプルエフェクト(とコードコール)を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) 

答えて

5

私は私の応答変数をプリントアウトしている必要があります。カテゴリは、0と1ではなく1と2とラベル付けされ、分類器を混乱させた。

+2

私の場合、私はこの問題のオートエンコーダーを持っていました。私の行列の私の列の4つは1より大きな値を持っていましたが、残りの284の列は[0,1]の範囲でした。最大値を使用して1より大きい値で列をリベースすると、問題が修正されました。 – shadi

+0

私の場合も共有したいです。私はクロスバイナリエントロピーを用いた画像セグメンテーションのトレーニングにCNN U-Netを使用しています。私は真/偽から私のマスクを255/0に変換してしまい、それが分類器を混乱させ、負の損失を引き起こしました。 –

関連する問題