tensorflow で を指定するvalidation_data
と.fit()
、検証が失われます。ただし、検証データセットに多数のミニバッチがある場合でも、検証の損失は 1 つだけです。したがって、テンソルフローが検証のために損失をどのように計算するのか疑問に思っていました。
例えば:
import tensorflow as tf
import numpy as np
import pandas as pd
model = tf.keras.Sequential([
tf.keras.layers.Dense(8, input_shape=(4,)),
tf.keras.layers.Dense(1)
])
model.compile(loss='MAE')
df = pd.DataFrame(np.random.rand(1000, 5), columns=['A', 'B', 'C', 'D', 'E'])
data = tf.data.Dataset.from_tensor_slices(df)
data = data.map(lambda x: (x[:4], x[-1:]))
train = data.take(900).batch(10)
val = data.skip(900).batch(10)
model.fit(train, validation_data=val, epochs=50)
これにより、次のようになります。
Epoch 1/50
90/90 [==============================] - 0s 2ms/step - loss: 0.4025 - val_loss: 0.3321
Epoch 2/50
90/90 [==============================] - 0s 635us/step - loss: 0.3114 - val_loss: 0.3065
Epoch 3/50
90/90 [==============================] - 0s 765us/step - loss: 0.2906 - val_loss: 0.2919
Epoch 4/50
90/90 [==============================] - 0s 689us/step - loss: 0.2784 - val_loss: 0.2807
Epoch 5/50
90/90 [==============================] - 0s 629us/step - loss: 0.2709 - val_loss: 0.2738
...
検証データセットに 10 個の検証ミニバッチがある場合、検証の損失は 1 つだけです。tensorflow は、損失を計算するのに 1 つのミニバッチしか必要としませんか? それとも、各バッチの y_pred を個別に計算してから、検証データ全体の損失を計算しますか? それとも、10 個のミニバッチに対して 10 個の損失を計算してから、要約統計を取りますか?