web-dev-qa-db-ja.com

Kerasのmodel.evaluate()から返される値は何ですか?

複数の高密度レイヤーからのモデルから複数の出力を取得しました。私のモデルには、コンパイルの唯一のメトリックとして'accuracy'があります。各出力の損失と精度を知りたいのですが。これは私のコードの一部です。

scores = model.evaluate(X_test, [y_test_one, y_test_two], verbose=1)

スコアを印刷したとき、これが結果です。

[0.7185557290413819, 0.3189622712272771, 0.39959345855771927, 0.8470299135229717, 0.8016634374641469]

これらの数字は何を表していますか?

私はKerasが初めてなので、これは些細な質問かもしれません。しかし、私はKerasのドキュメントを読みましたが、まだわかりません。

24
GGG

evaluate()メソッドドキュメント から引用:

戻り値

スカラーテスト損失(モデルに単一の出力があり、メトリックがない場合)またはスカラーのリスト(モデルに複数の出力またはメトリックがある場合)。属性model.metrics_namesは、スカラー出力の表示ラベルを提供します。

したがって、モデルのmetrics_namesプロパティを使用して、これらの各値が何に対応するかを調べることができます。例えば:

from keras import layers
from keras import models
import numpy as np

input_data = layers.Input(shape=(100,)) 
out_1 = layers.Dense(1)(input_data)
out_2 = layers.Dense(1)(input_data)

model = models.Model(input_data, [out_1, out_2])
model.compile(loss='mse', optimizer='adam', metrics=['mae'])

print(model.metrics_names)

次を出力します。

['loss', 'dense_1_loss', 'dense_2_loss', 'dense_1_mean_absolute_error', 'dense_2_mean_absolute_error']

これは、evaluateメソッドの出力に表示される各数値が何に対応するかを示します。

さらに、多くのレイヤーがある場合、それらのdense_1およびdense_2の名前は少しあいまいになる可能性があります。このあいまいさを解決するために、レイヤーのname引数を使用してレイヤーに名前を割り当てることができます(必ずしもすべてではなく、入力レイヤーと出力レイヤーのみ)。

# ...
out_1 = layers.Dense(1, name='output_1')(input_data)
out_2 = layers.Dense(1, name='output_2')(input_data)
# ...

print(model.metrics_names)

より明確な説明を出力します:

['loss', 'output_1_loss', 'output_2_loss', 'output_1_mean_absolute_error', 'output_2_mean_absolute_error']
27
today