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