gpt4 book ai didi

python - 如何获得每个时期而不是每个批处理的损失?

转载 作者:行者123 更新时间:2023-11-30 08:42:24 25 4
gpt4 key购买 nike

根据我的理解,纪元是对整个数据集进行任意经常重复的运行,然后按部分(即所谓的批处理)进行处理。每次train_on_batch计算损失后,权重就会更新,下一批将获得更好的结果。这些损失是我对神经网络的质量和学习状态的指标。

在多个来源中,损失是按时期计算(并打印)的。因此我不确定我这样做是否正确。

目前我的 GAN 看起来像这样:

for epoch:
for batch:

fakes = generator.predict_on_batch(batch)

dlc = discriminator.train_on_batch(batch, ..)
dlf = discriminator.train_on_batch(fakes, ..)
dis_loss_total = 0.5 * np.add(dlc, dlf)

g_loss = gan.train_on_batch(batch,..)

# save losses to array to work with later

这些损失是针对每批处理的。我如何获得一个纪元的它们?顺便说一句:我是否需要一个时期的损失,为什么?

最佳答案

没有直接的方法来计算一个纪元的损失。实际上,一个纪元的损失通常被定义为该纪元内批处理损失的平均值。因此,您可以累积一个 epoch 期间的损失值,最后将其除以该 epoch 中的批处理数:

epoch_loss = []
for epoch in range(n_epochs):
acc_loss = 0.
for batch in range(n_batches):
# do the training
loss = model.train_on_batch(...)
acc_loss += loss
epoch_loss.append(acc_loss / n_batches)

至于另一个问题,纪元损失的一种用法可能是将其用作停止训练的指标(但是,通常使用验证损失,而不是训练损失)。

关于python - 如何获得每个时期而不是每个批处理的损失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54053868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com