# 第一种
loss = nn.BCELoss()
loss(softmax(a), target)
# 第二种
loss = nn.BCEWithLogitsLoss()
loss(a, target)
CycleGan
项目地址:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
注意
- 判别模块 D 来说,不需要图片是成对的。只需要一批斑马和另一批马。而不需要一摸一样的图,只是斑马换成了马。
- 图中的流向只画了一半,另一半是把 A 和 B 数据集颠倒一下。
- 用的还是同一个 $G_{AB}$ 和 $G_{BA}$
- 新增一个 $D_A$ 用来对 Real A 和 Fake A 分类。
- 涉及到4种损失函数
- G 网络对应的损失函数,
nn.BCEWithLogitsLoss().(D(output_fake), 1)
,也就是说, G 产生的 Fake 图,输入 D 后得到的值尽可能接近1 - D 网络对应的损失函数:一批 fake 和一批 real,尽可能判别出来。使用的不是 sigmoid,而是基于感受野的 PatchGAN,它输出的是NxN的矩阵,表示每个对应的感受野的标签。
- Cycle:Real 图片和 Recostructed 图片,在像素级别尽可能一致
- Identity:(这个在图里面没画,论文里面没说,但项目中有),把 A 输入 GAB,输出的仍然极可能接近 A;把 B 输入 GBA,输出的尽可能接近 B。
- G 网络对应的损失函数,