Я хочу дать изображение и список модели keras для GAN. Дискриминатор получит изображение, и некоторые списки будут иметь фиксированный размер, то есть 128x128x3 и 384, и генератор выдаст изображения 128x128x3, которые диск должен пометить как поддельные. Поэтому проблема в том, что я не могу понять, какой должна быть форма ввода для дискриминатора и как он должен быть инициализирован. Вот наиболее подходящий простой код инициализатора, который необходимо изменить, чтобы получить изображение и перечислить в качестве входных данных, где диск получает только изображение размером 128x128x3, и все это прекрасно работает: -
arr=embeddings #384 length long list
self.generator = self.build_generator()
z = Input(shape=(100,))
img = self.generator(z) #gen gets noise and generates 128x128x3
self.discriminator.trainable = False
valid = self.discriminator(img) #should get 128x128x3 image and "arr" list
self.combined = Model(z, valid)
self.combined.compile(loss='binary_crossentropy', optimizer=optimizer)
И обучающий код такой, который должен быть изменен соответственно: -
d_loss_real = self.discriminator.train_on_batch(pics, valid)
d_loss_fake = self.discriminator.train_on_batch(gen_pics, fake)
d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)
g_loss = self.combined.train_on_batch(latent_code, valid)
Архитектура диска выглядит следующим образом, его входной слой должен быть изменен так, чтобы он мог также взять список с изображением: -
model = Sequential()
model.add(Conv2D(32, kernel_size=5, strides=2, input_shape=(128,128,3), padding="same"))
model.add(LeakyReLU(alpha=0.2))
model.add(Dropout(0.25))
model.add(Conv2D(48, kernel_size=5, strides=2, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(LeakyReLU(alpha=0.2))
model.add(Dropout(0.25))
model.add(Conv2D(64, kernel_size=5, strides=2, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(LeakyReLU(alpha=0.2))
model.add(Dropout(0.25))
model.add(Conv2D(128, kernel_size=5, strides=2, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(LeakyReLU(alpha=0.2))
model.add(Dropout(0.25))
model.add(Conv2D(256, kernel_size=5, strides=2, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(LeakyReLU(alpha=0.2))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.summary()
img = Input(shape=self.img_shape)
validity = model(img)
return Model(img, validity)
Я попытался добавить вложение с изображением, но затем GEN должен сгенерировать вложение также с изображением, или GEN сгенерировал изображение, и вложения были объединены с этим изображением, сделанным из 129x128x3 и переданным в DISC, но затем во время инициализации здесь "g_loss = self.combined.train_on_batch (latent_code, valid) "ошибка возникает из-за того, что я должен указать форму img в начале 129,128,3, и в этом вопросе я могу найти больше деталей, связанных с той же проблемой: -
Ошибка при добавлении вложений в img
Любая помощь будет отличной, я почесал ей голову в течение нескольких дней.