Keras 调整GAN超参数

Keras 调整GAN超参数,keras,deep-learning,generative-adversarial-network,Keras,Deep Learning,Generative Adversarial Network,如上图所示,在训练DCGAN模型时,梯度不稳定且波动较大,因此模型无法画出完美的图像,甚至画一幅人眼能识别的图像。有人能告诉我如何调整辍学率、学习率等参数,使模型运行得更好吗?我将非常感谢你! 以下是我以前制作的模型(使用Keras构建): 鉴别器: 学习率为0.0005 辍学率为0.6 批量大小为25 dis=Sequential() dis.add(Conv2D(depth*1, 5, strides=2, input_shape=(56,56,3),padding='same',kern

如上图所示,在训练DCGAN模型时,梯度不稳定且波动较大,因此模型无法画出完美的图像,甚至画一幅人眼能识别的图像。有人能告诉我如何调整辍学率、学习率等参数,使模型运行得更好吗?我将非常感谢你! 以下是我以前制作的模型(使用Keras构建):

鉴别器:

学习率为0.0005

辍学率为0.6

批量大小为25

dis=Sequential()

dis.add(Conv2D(depth*1, 5, strides=2, input_shape=(56,56,3),padding='same',kernel_initializer='RandomNormal', bias_initializer='zeros'))

dis.add(LeakyReLU(alpha=alp))

dis.add(Dropout(dropout))

dis.add(Conv2D(depth*2, 5, strides=2, padding='same',kernel_initializer='RandomNormal', bias_initializer='zeros'))

dis.add(LeakyReLU(alpha=alp))

dis.add(Dropout(dropout))

dis.add(Conv2D(depth*4, 5, strides=2, padding='same',kernel_initializer='RandomNormal', bias_initializer='zeros'))

dis.add(LeakyReLU(alpha=alp))

dis.add(Dropout(dropout))

dis.add(Conv2D(depth*8,5,strides=1,padding='same',kernel_initializer='RandomUniform', bias_initializer='zeros'))

dis.add(LeakyReLU(alpha=alp))

dis.add(Dropout(dropout))

dis.add(Flatten())

dis.add(Dense(1))

dis.add(Activation('sigmoid'))

dis.summary()

dis.compile(loss='binary_crossentropy',optimizer=RMSprop(lr=d_lr))
发电机和GAN型号:

学习率为0.0001

动量是0.9

gen=Sequential()

gen.add(Dense(dim*dim*dep,input_dim=100))

gen.add(BatchNormalization(momentum=momentum))

gen.add(Activation('relu'))

gen.add(Reshape((dim,dim,dep)))

gen.add(Dropout(dropout))

gen.add(UpSampling2D())

gen.add(Conv2DTranspose(int(dep/2),5,padding='same',kernel_initializer='RandomNormal', bias_initializer='RandomNormal'))

gen.add(BatchNormalization(momentum=momentum))

gen.add(Activation('relu'))

gen.add(UpSampling2D())

gen.add(Conv2DTranspose(int(dep/4),5,padding='same',kernel_initializer='RandomNormal', bias_initializer='RandomNormal'))

gen.add(BatchNormalization(momentum=momentum))

gen.add(Activation('relu'))

gen.add(UpSampling2D())

gen.add(Conv2DTranspose(int(dep/8),5,padding='same',kernel_initializer='RandomNormal', bias_initializer='RandomNormal'))

gen.add(BatchNormalization(momentum=momentum))

gen.add(Activation('relu'))

gen.add(Conv2DTranspose(3,5,padding='same',kernel_initializer='RandomNormal', bias_initializer='RandomNormal'))

gen.add(Activation('sigmoid'))

gen.summary()


GAN=Sequential()

GAN.add(gen)

GAN.add(dis)

GAN.compile(loss='binary_crossentropy',optimizer=RMSprop(lr=g_lr))

稳定GAN训练是一个开放的研究问题。不过,我可以给你两个建议。如果您坚持原来的GAN训练程序,并且对您正在做的事情没有绝对的了解,请使用DCGAN体系结构和他们论文中描述的可用超参数()。GAN训练是高度不稳定的,使用其他超参数将导致模式崩溃或消失梯度


使用GAN更简单的方法是使用Wasserstein GAN。这些都是相当稳定的,有一个简单的体系结构。然而,我强烈建议使用他们论文中建议的超参数,因为对我来说,不同的超参数也会导致训练失败。改进的Wasserstein-GAN:[

谢谢。我将尝试使用Wasserstein-GAN。鉴别器似乎很好,但生成器却不好。我认为您可以对生成器进行更长时间的训练,降低学习速度。