web-dev-qa-db-ja.com

トレーニング中、モデルのKeras精度は常に0

私は試してみるために簡単なネットワークを構築したケラにかなり新しいです:

import numpy as np;

from keras.models import Sequential;
from keras.layers import Dense,Activation;

data= np.genfromtxt("./kerastests/mydata.csv", delimiter=';')
x_target=data[:,29]
x_training=np.delete(data,6,axis=1)
x_training=np.delete(x_training,28,axis=1)

model=Sequential()
model.add(Dense(20,activation='relu', input_dim=x_training.shape[1]))
model.add(Dense(10,activation='relu'))
model.add(Dense(1));

model.compile(optimizer='adam',loss='mean_squared_error',metrics=['accuracy'])
model.fit(x_training, x_target)

ご覧のとおり、ソースデータから2つの列を削除しました。 1つは文字列形式の日付が付いた列です(データセットの横にある月には1日、もう1年には1年の列があるため、その列は不要です)。もう1つの列は、使用する列ですモデルのターゲット)。

このモデルをトレーニングすると、次の出力が得られます。

32/816 [>.............................] - ETA: 23s - loss: 13541942.0000 - acc: 0.0000e+00
800/816 [============================>.] - ETA: 0s - loss: 11575466.0400 - acc: 0.0000e+00 
816/816 [==============================] - 1s - loss: 11536905.2353 - acc: 0.0000e+00     
Epoch 2/10
 32/816 [>.............................] - ETA: 0s - loss: 6794785.0000 - acc: 0.0000e+00
816/816 [==============================] - 0s - loss: 5381360.4314 - acc: 0.0000e+00     
Epoch 3/10
 32/816 [>.............................] - ETA: 0s - loss: 6235184.0000 - acc: 0.0000e+00
800/816 [============================>.] - ETA: 0s - loss: 5199512.8700 - acc: 0.0000e+00
816/816 [==============================] - 0s - loss: 5192977.4216 - acc: 0.0000e+00     
Epoch 4/10
 32/816 [>.............................] - ETA: 0s - loss: 4680165.5000 - acc: 0.0000e+00
736/816 [==========================>...] - ETA: 0s - loss: 5050110.3043 - acc: 0.0000e+00
816/816 [==============================] - 0s - loss: 5168771.5490 - acc: 0.0000e+00     
Epoch 5/10
 32/816 [>.............................] - ETA: 0s - loss: 5932391.0000 - acc: 0.0000e+00
768/816 [===========================>..] - ETA: 0s - loss: 5198882.9167 - acc: 0.0000e+00
816/816 [==============================] - 0s - loss: 5159585.9020 - acc: 0.0000e+00     
Epoch 6/10
 32/816 [>.............................] - ETA: 0s - loss: 4488318.0000 - acc: 0.0000e+00
768/816 [===========================>..] - ETA: 0s - loss: 5144843.8333 - acc: 0.0000e+00
816/816 [==============================] - 0s - loss: 5151492.1765 - acc: 0.0000e+00     
Epoch 7/10
 32/816 [>.............................] - ETA: 0s - loss: 6920405.0000 - acc: 0.0000e+00
800/816 [============================>.] - ETA: 0s - loss: 5139358.5000 - acc: 0.0000e+00
816/816 [==============================] - 0s - loss: 5169839.2941 - acc: 0.0000e+00     
Epoch 8/10
 32/816 [>.............................] - ETA: 0s - loss: 3973038.7500 - acc: 0.0000e+00
672/816 [=======================>......] - ETA: 0s - loss: 5183285.3690 - acc: 0.0000e+00
816/816 [==============================] - 0s - loss: 5141417.0000 - acc: 0.0000e+00     
Epoch 9/10
 32/816 [>.............................] - ETA: 0s - loss: 4969548.5000 - acc: 0.0000e+00
768/816 [===========================>..] - ETA: 0s - loss: 5126550.1667 - acc: 0.0000e+00
816/816 [==============================] - 0s - loss: 5136524.5098 - acc: 0.0000e+00     
Epoch 10/10
 32/816 [>.............................] - ETA: 0s - loss: 6334703.5000 - acc: 0.0000e+00
768/816 [===========================>..] - ETA: 0s - loss: 5197778.8229 - acc: 0.0000e+00
816/816 [==============================] - 0s - loss: 5141391.2059 - acc: 0.0000e+00    

なぜこうなった?私のデータは時限セリエです。時系列シリーズでは、人々は通常密なニューロンを使用しないことを知っていますが、これは単なるテストです。本当に私をだましているのは、精度が常に0であるということです。そして、他のテストでは損失さえしました:「NAN」値を取得します。

誰もここで助けてもらえますか?

乾杯。

17
Notbad

次の理由により、モデルは回帰モデルに対応しているようです。

  • 出力レイヤーでアクティベーション関数としてlinear(デフォルト)を使用しています(前のレイヤーでrelu)。

  • あなたの損失はloss='mean_squared_error'です。

ただし、使用するメトリックmetrics=['accuracy']は分類の問題に対応しています。回帰を行う場合は、metrics=['accuracy']を削除します。つまり、使用する

model.compile(optimizer='adam',loss='mean_squared_error')

以下は、回帰と分類のケラスメトリックのリストです( このブログ投稿 から取得)。

ケラス回帰メトリック

•二乗平均誤差:mean_squared_error、MSEまたはmse

•平均絶対誤差:mean_absolute_error、MAE、mae

•平均絶対パーセントエラー:mean_absolute_percentage_error、MAPE、mape

•コサイン近接:cosine_proximity、cosine

ケラス分類指標

•バイナリ精度:binary_accuracy、acc

•カテゴリー精度:categorical_accuracy、acc

•スパースカテゴリの精度:sparse_categorical_accuracy

•上位kカテゴリの精度:top_k_categorical_accuracy(kパラメータを指定する必要があります)

•スパーストップkカテゴリ精度:sparse_top_k_categorical_accuracy(kパラメータを指定する必要があります)

35
Miriam Farber

以下を追加して、メトリックを取得します。

   history = model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mean_squared_error'])
   # OR
   history = model.compile(optimizer='adam', loss='mean_absolute_error', metrics=['mean_absolute_error'])
   history.history.keys()
   history.history
1
itsergiu