我想为GAN的keras模型提供图像和列表。鉴别器将得到图像,并且一些列表都是固定大小的,即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)“发生错误,因为我必须在129,128,3的开头指定img的形状,并且我可以在此问题中找到与同一问题相关的更多详细信息:-< / p>
Issue when embeddings are added to the img
任何帮助都会很棒,好几天以来我一直在挠头。
答案 0 :(得分:0)
我想到的一个可能的解决方法是,在将生成器输出提供给鉴别器输入和损耗计算之前,将其嵌入到生成器输出中。