Как показано на двух изображениях выше, во время обучения модели 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,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))