【问题标题】:Give a list and an image as input to a keras model将列表和图像作为 keras 模型的输入
【发布时间】:2018-07-05 15:41:46
【问题描述】:

我想为 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 的形状,我可以在与同一问题相关的这个问题中找到更多详细信息:-

Issue when embeddings are added to the img

任何帮助都会很棒,这几天我一直在摸不着头脑。

【问题讨论】:

  • 到底是什么错误?
  • 我无法检查您现在提供的代码,但这个问题之前发布过,直到那时发生了 keras.backend 错误。
  • 好的,如果答案相同,请告诉我,我会移到这里
  • 好的,会尽快检查的
  • 这是我在更新代码时遇到的错误“模型输入必须来自 Keras 输入层,它们不能是先前非输入层的输出。这里,指定为输入的张量"model_3" 不是输入张量,它是由层 model_2 生成的。请注意,输入张量是通过 tensor = Input(shape) 实例化的。"你能看看上面的代码,告诉我哪里做错了吗?

标签: python tensorflow input keras


【解决方案1】:

我能想到的一种可能的解决方法是将相同的嵌入附加到生成器输出,然后再将其馈送到鉴别器输入和损失计算。

【讨论】:

  • 我就是这样做的,请查看发布的问题链接。这样做时会出现问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2018-04-04
  • 2021-06-18
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
相关资源
最近更新 更多