目录
DCGAN——不变GAN原理下提出了一些有助于增强稳定性的tricks
1、前置知识
2、原理简介
阶段一 训练判别器
将真实样本input1和生成器随机生成的样本input2共同送入判别器训练,要求判别器将真实数据判别为真,生成器生成数据判别为假。
阶段二 训练生成器
固定判别器,训练生成器,使其生成的数据能够被判别器识别为真。
伪代码如下:
for 迭代 in (迭代总数):
for batch in range(batch_size):
新batch = input1的batch + input2的batch #此处batch加倍
for 轮数 in range(判别器总轮数):
阶段一 训练判别器
阶段二 训练生成器
3、实例引入——手写数字图像生成
生成器代码
noise = np.random.uniform(-1,1,(batch_size,latent_size) #通过噪音生成图片
def generator_model():
model.Sequential()
model.add(Dense(input_dim=100,output_dim=1024)) #全连接层,100维->1024维
model.add(Activation('relu'))
model.add(Dense(128*7*7)) #生成图片,128通道的7*7大小
model.add(BatchNormalizaion())
model.add(Activation('relu'))
model.add(Reshape((7,7,128),input_shape=(128*7*7,)))
model.add(UnSampling2D(size=(2,2))) #将7*7升高为原来二倍变为14*14
model.add(Conv2D(64,(5,5),padding='same'))
model.add(Activation('relu'))
model.add(UnSampling2D(size=(2,2))) #变为28*28
model.add(Conv2D(1,(5,5),padding='same'))
model.add(Activation('tanh'))
return model
判别器代码
def discriminator_model(): #本质为二分类问题
model = Sequential()
model.add(Conv2D(64,(5,5),padding='same',input_shape=(28,28,1)))
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(128,(5,5)))
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('tanh'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
return model
辅助函数
固定判别器D调整生成器G
def generator_containing_discriminator(g,d):
model = Sequential()
model.add(g)
d.trainable = False
model.add(d)
return model
3、GAN的其他类别
CGAN——指定类的输出
DCGAN——不变GAN原理下提出了一些有助于增强稳定性的tricks
ACGAN——判断真假+判断类别
infoGAN
LAPGAN
EBGAN
版权声明:本文为m0_58586235原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。