――Da ich keine Zeit habe, werde ich den Mechanismus von GAN vorerst weglassen. --Schreiben Sie die Einstellungen für Generator und Diskriminator --Miso verwendet LeakyReLu ** als Aktivierungsfunktion für Generator und Diskriminator.
Generator
generator
def _build_generator(self) -> Model:
start_pix_x = 4
start_pix_y = 4
kernel_ini = RandomNormal(mean=0.0, stddev=0.02)
inputs = Input(shape=self.noise_shape)
x = Dense(
units=256*start_pix_x*start_pix_y,
kernel_initializer=kernel_ini,
bias_initializer='zeros')(inputs)
x = LeakyReLU(alpha=0.2)(x)
x = Reshape((start_pix_x, start_pix_y, 256))(x)
x = Conv2DTranspose(
filters=128,
kernel_size=4,
strides=2,
padding='same',
kernel_initializer=kernel_ini,
bias_initializer='zeros')(x)
x = LeakyReLU(alpha=0.2)(x)
# x = BatchNormalization(axis=3)(x)
x = Conv2DTranspose(
filters=128,
kernel_size=4,
strides=2,
padding='same',
kernel_initializer=kernel_ini,
bias_initializer='zeros')(x)
x = LeakyReLU(alpha=0.2)(x)
# x = BatchNormalization(axis=3)(x)
x = Conv2DTranspose(
filters=128,
kernel_size=4,
strides=2,
padding='same',
kernel_initializer=kernel_ini,
bias_initializer='zeros')(x)
x = LeakyReLU(alpha=0.2)(x)
x = Conv2D(
filters=3,
kernel_size=3,
padding='same',
kernel_initializer=kernel_ini,
bias_initializer='zeros')(x)
y = Activation('tanh')(x)
model = Model(inputs, y)
if self.verbose:
model.summary()
return model
Discriminator
discriminator
def _build_discriminator(self) -> Model:
kernel_ini = RandomNormal(mean=0.0, stddev=0.02)
inputs = Input(shape=self.shape)
x = GaussianNoise(stddev=0.05)(inputs) # prevent d from overfitting.
x = Conv2D(
filters=64,
kernel_size=3,
padding='SAME',
kernel_initializer=kernel_ini,
bias_initializer='zeros')(x)
x = LeakyReLU(alpha=0.2)(x)
# x = Dropout(0.5)(x)
x = Conv2D(
filters=128,
kernel_size=3,
strides=2,
padding='SAME',
kernel_initializer=kernel_ini,
bias_initializer='zeros')(x)
x = LeakyReLU(alpha=0.2)(x)
# x = Dropout(0.5)(x)
# x = BatchNormalization(axis=3)(x)
x = Conv2D(
filters=128,
kernel_size=3,
strides=2,
padding='SAME',
kernel_initializer=kernel_ini,
bias_initializer='zeros')(x)
x = LeakyReLU(alpha=0.2)(x)
# x = Dropout(0.5)(x)
# x = BatchNormalization(axis=3)(x)
x = Conv2D(
filters=256,
kernel_size=3,
strides=2,
padding='SAME',
kernel_initializer=kernel_ini,
bias_initializer='zeros')(x)
x = LeakyReLU(alpha=0.2)(x)
x = Flatten()(x)
features = Dropout(0.4)(x)
validity = Dense(1, activation='sigmoid')(features)
model4d = Model(inputs, validity)
model4g = Model(inputs, validity)
if self.verbose:
model4d.summary()
return model4d, model4g
Die Ausgabezeile entspricht der Klasse. DCGAN erzeugt nur ein Bild, aber das erzeugte Bild wird in das Trainingsmodell eingegeben, das aus dem Originalbild aufgebaut und gemäß der vorhergesagten Bezeichnung gekennzeichnet ist, und das Bild wird für jede Vorhersageklasse ausgegeben. Durch das Einfügen von LeakyReLU in den Generator habe ich das Gefühl, dass das Objekt des Objekts fester generiert werden kann.
Ich habe es in Eile gemacht, also werde ich es zu einem späteren Zeitpunkt ausführlich schreiben.
Recommended Posts