Seb*_*ian 7 python machine-learning keras generative-adversarial-network
在我的理解中,epoch 是在整个数据集上任意频繁地重复运行,然后分部分处理,即所谓的批处理。每次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
Run Code Online (Sandbox Code Playgroud)
这些损失是针对每个批次的。我如何在一个时代获得它们?顺便说一句:我需要一个时代的损失,为了什么?
没有直接的方法来计算一个时期的损失。实际上,一个 epoch 的损失通常定义为该 epoch 中批次损失的平均值。因此,您可以在一个 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)
Run Code Online (Sandbox Code Playgroud)
至于另一个问题,epoch loss 的一个用途可能是将其用作停止训练的指标(但是,通常使用验证损失,而不是训练损失)。
| 归档时间: |
|
| 查看次数: |
8418 次 |
| 最近记录: |