一、问题总结

1、理论方面,概率学的不好,很多分布都不知道说的是啥
2、代码方面,不够熟练,一些函数怎么调用只能看懂,不能靠自己从零手打出来

二、代码学习

1.GAN

batch_size = 50的训练效果一言难尽
image.png
image.png
改到250以后
image.png
image.png
舒服多了
生成更多的样本观察一下

image.png
感觉有些点生成的趋势很迷

3.CGAN和DCGAN

训练时候代码有个地方报错,是维度不匹配问题。修改代码:

  1. real_loss = bce(discriminator(real_images, real_labels).squeeze(-1), ones)
  2. fake_loss = bce(discriminator(fake_images.detach(), c).squeeze(-1), zeros)

CGAN
epoch = 200时
image.png
训练发现,超过100后开始训不下去了
看一下效果图
image.png
拉跨(之前训30个epoch的时候也是这个效果)
CGAN是把图像直接拉成一个向量来处理,没有考虑空间上的特性,因此,效果理论上会不如使用卷积操作的 DCGAN。

DCGAN(epoch=30)
效果图
image.png
当epoch增加到100时
image.png(WTF?)

三、视频学习

1.简介

(1)背景

(2)示例

图像着色(旧图像修复)、图像超像素(手机相机)、背景模糊、人脸生成人脸定制(娱乐软件)、卡通头像生成、文本生成图片、字体变换、风格变换、图像修复、帧预测

2.基础

(1)GANimage.png

D判别器:区分真实样本和虚假样本(核心)
G生成器:欺骗判别器(核心)
z随机噪声
x真实样本
image.png
KL散度:一种衡量两个概率分布的匹配程度的指标
image.png
性质:
当且P1=P2,KL散度为零
KL散度具有非负性(吉布斯不等式)
image.png
(由于KL散度不对称提出)JS散度(具有非负性、对称性):
image.png
极大似然估计:最小化生成数据分布和真实分布的KL散度
GAN:通过对抗训练,间接计算出JS散度,使得模型可以优化
最大化判别器损失,等价于计算合成数据分布和真实数据分布的JS散度
最小化生成器损失,等价于最小化JS散度(也就是优化生成模型)

(2)cGAN(输入是(image, label))

条件生成、改进判别器

(3)DCGAN

判别器:滑动卷积
生成器:滑动反卷积
批归一化
激活函数