在 tensorflow 中,如果我们提供validation_data
in .fit()
,我们会得到验证损失。但是即使验证数据集有很多小批量,也只有一个验证损失。所以我想知道 tensorflow 如何计算验证损失。
例如:
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 个验证小批量时,只有一个验证损失。tensorflow 是否只需要一个 mini-batch 来计算损失?或者它是否单独计算每个批次的 y_pred,然后计算整个验证数据的损失?还是计算 10 个 mini-batch 的 10 个 loss,然后进行汇总统计?