Дайте список и изображение в качестве входных данных для модели керас - PullRequest
0 голосов
/ 05 июля 2018

Я хочу дать изображение и список модели 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

Любая помощь будет отличной, я почесал ей голову в течение нескольких дней.

1 Ответ

0 голосов
/ 05 июля 2018

Одно возможное исправление, о котором я могу подумать, это добавление того же встраивания к выходу генератора перед подачей его на вход дискриминатора и вычисление потерь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...