gpt4 book ai didi

python - 用于域翻译的条件 GAN

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:52 25 4
gpt4 key购买 nike

我正在训练一个 GAN 来执行来自两个不同图像域(源 S 和目标 T)的风格转换。因为我有可用的类信息,所以我有一个额外的 Q 网络(GD 除外),用于测量生成图像的分类结果目标域及其标签(LeNet 网络)并将错误传播到生成器以及 D。从系统的收敛中我注意到 D 总是从 8 开始(D 网络的损失函数误差)并略微下降到 4.5 和 G 损失函数误差从 1 开始迅速下降到 0.2。我用的DG的损失函数可以找到hereQ网络的损失函数是分类交叉熵。迭代的错误图是:

enter image description here

D和G的损失函数为:

def discriminator_loss(y_true,y_pred):
BATCH_SIZE=10
return K.mean(K.binary_crossentropy(K.flatten(y_pred), K.concatenate([K.ones_like(K.flatten(y_pred[:BATCH_SIZE,:,:,:])),K.zeros_like(K.flatten(y_pred[:BATCH_SIZE,:,:,:])) ]) ), axis=-1)

def discriminator_on_generator_loss(y_true,y_pred):
BATCH_SIZE=10
return K.mean(K.binary_crossentropy(K.flatten(y_pred), K.ones_like(K.flatten(y_pred))), axis=-1)

def generator_l1_loss(y_true,y_pred):
BATCH_SIZE=10
return K.mean(K.abs(K.flatten(y_pred) - K.flatten(y_true)), axis=-1)

D 的误差函数总是那么高有意义吗? DG错误的解释是什么?是不是 D 的损失在开始时应该很小,并在迭代后上升?用损失阈值限制 D 超过 G 是个好主意吗?最后,在训练期间,计算验证集损失函数的误差而不是我正在使用的训练集的误差是否有意义? (而不是直接使用 train_on_batch,使用 fit 然后在测试集上进行评估)。

编辑:

对于损失,我认为discriminatordiscriminator_on_generator的损失是GANs的正常损失函数,对吧?

最佳答案

设 G 为生成器,D 为鉴别器。最初,D 和 G 都是未经训练的。现在,让我们假设 D 比 G 学得更快。因此,一段时间后,G 可以区分从真实数据分布中采样的样本和从生成器中采样的样本。最后,G catch 并学习模拟真实的数据分布。现在,D 无法再区分从真实数据分布中采样的样本和从生成器中采样的样本。

Combined G D losses

因此,我们最初从 D 和 G(区域 I)的高损失开始。然后 D 的损失比 G 的损失减少得更快(区域 I 到 II)。随着 G 的损失继续减少,D 的损失增加(区域 II)。最后,两者的loss均达到平衡值,训练结束(Region III)。

D loss G loss

关于python - 用于域翻译的条件 GAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52353264/

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