複数の高密度レイヤーからのモデルから複数の出力を取得しました。私のモデルには、コンパイルの唯一のメトリックとして'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のドキュメントを読みましたが、まだわかりません。
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']