このチュートリアルを実行してmodelのトレーニングを完了したのち、
手動でmseによる損失を計算したいと思います。
tf.keras.losses.MeanSquaredErrorを用いると
Python
1mse = tf.keras.losses.MeanSquaredError() 2 3mse(train_labels, model.predict(normed_train_data)).numpy() 4 5>>118.41424560546875
となり、上記チュートリアル中のlossの結果に比べると全然違う値が返ってきます。
もしくはtf.keras.metrics.mean_squared_errorで計算させると
Python
1tf.keras.metrics.mean_squared_error( 2 model.predict(normed_train_data), train_labels, 3).numpy().shape 4 5>>(314,)
正解ラベルの数だけlossが返ってきます。
y_predとy_trainの形状は
Python
1model.predict(normed_train_data).shape 2>>(314, 1) 3train_labels.shape 4>>(314, )
のようになっているので、それをReshapeして合わせると、
Python
1tf.keras.metrics.mean_squared_error( 2 model.predict(normed_train_data).reshape(-1), train_labels, 3).numpy() 4>>3.975967443404117 5 6mse = tf.keras.losses.MeanSquaredError() 7 8mse(model.predict(normed_train_data).reshape(-1), train_labels).numpy() 9>>3.9759674072265625
と近い値になります。
また以下のように手動でloss関数を tf.keras.metrics.mean_squared_errorで設定した場合も上と同じ結果が得られます。
Python
1def custom_loss(y_true, y_pred): 2 loss = tf.keras.metrics.mean_squared_error( 3 y_true, y_pred 4 ) 5 return loss 6 7def build_model(): 8 model = keras.Sequential([ 9 layers.Dense(64, activation='relu', input_shape=[len(train_dataset.keys())]), 10 layers.Dense(64, activation='relu'), 11 layers.Dense(1) 12 ]) 13 14 optimizer = tf.keras.optimizers.RMSprop(0.001) 15 16 model.compile(loss=custom_loss, 17 optimizer=optimizer, 18 metrics=['mae', 'mse']) 19 return model
model.fit中で計算されるmseの結果は内部的に自動でreshapeされてリンク中のような結果になっているのでしょうか?
あなたの回答
tips
プレビュー