-1

在 tensorflow 中,如果我们提供validation_datain .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,然后进行汇总统计?

4

1 回答 1

1

这里

对于训练损失,keras 对批次进行运行平均。对于验证损失,对验证数据中的所有批次进行常规平均。训练准确率是训练过程中每批训练数据的准确率值的平均值。

但我会用一粒盐来回答。代码不清楚,但似乎验证损失只是批次的平均值。您可以使用一些合成数据来验证您的生活是否依赖于此;-)

于 2020-12-24T07:59:19.327 回答