如上图所示,在训练DCGAN模型时,渐变不稳定且波动很大。由于这个原因,模型无法绘制出完美的图像,甚至绘制出的图像也是如此。人眼认可。有人能告诉我如何调整参数,如辍学率或学习率等,以使模型运行得更好吗?我将非常感谢你! 这是我之前制作的模型(Build with Keras):
鉴别人:
学习率为0.0005
辍学率为0.6
batch_size是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.9gen=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))
答案 0 :(得分:1)
稳定的GAN培训是一个开放的研究问题。不过我可以给你两个提示。如果您坚持使用原始GAN培训例程并且不完全了解您正在做什么,请使用DCGAN体系结构以及他们的论文(https://arxiv.org/pdf/1511.06434.pdf%C3%AF%C2%BC%E2%80%B0)中描述的可用超参数。 GAN训练非常不稳定,使用其他超参数会导致模式崩溃或消失渐变。
使用GAN的更简单的方法是使用Wasserstein GAN。那些非常稳定的建筑物。但是,我强烈建议使用他们论文中建议的超参数,因为对我来说,不同的超参数训练也会崩溃。改进的Wasserstein GAN:[https://arxiv.org/pdf/1704.00028.pdf]