Google colaboratory で Keras を使用して小さなモデルを作成しました。また、TPU で学習を実行すると、間違ったメトリクスが表示されます。
もちろん、CPU/GPU で学習を実行すると、m1 および m2 メトリックは正しい数値を示します。(以下のコードを参照)
しかし、ランタイム タイプを TPU に変更した後、m1 と m2 は正しくなく、これらの値の平均のように見えます。
def m1(y_true, y_pred):
return K.constant(10)
def m2(y_true, y_pred):
return K.constant(20)
model = AnyModel()
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=[m1, m2])
model.fit(...)
【CPU/GPUの結果】
[=====>....] - ETA: 0s - loss: xxxxx - m1: 10.0000 - m2: 20.0000
【TPUの結果】
[=====>....] - ETA: 0s - loss: xxxxx - m1: 14.9989 - m2: 15.0000
CPU/GPU の結果が正しいことは明らかです。なぜこれが起こったのですか?回避策はありますか?
- メトリクス ([m1] など) を 1 つだけ使用する場合、値は正しいです。