python - ValueError: 层序的输入 0 与层不兼容。我该如何解决这个问题?
问题描述
我有自己的数据集,由大小为 100x100 的图像组成,而不是通常的 28x28(在 MNIST 中)。我正在尝试从我的数据集上的 tensorflow 主页运行 DCGAN 的代码,但我失败了。
我知道问题与尺寸有关,如果有人可以解释缺少的内容,我将不胜感激。我读过生成器的输出必须与鉴别器的输入匹配,但我不知道如何做到这一点。如果有人可以解释我必须调整的内容,将不胜感激?
这是鉴别器的代码:
def make_discriminator_model():
model = tf.keras.Sequential()
model.add(layers.Conv2D(128, (5, 5), strides=(2, 2), padding='same',input_shape=[100, 100, 1]))
model.add(layers.LeakyReLU())
model.add(layers.Dropout(0.3))
model.add(layers.Conv2D(64, (5, 5), strides=(2, 2), padding='same'))
model.add(layers.LeakyReLU())
model.add(layers.Dropout(0.3))
model.add(layers.Flatten())
model.add(layers.Dense(1))
return model
这是生成器的代码
def make_generator_model():
model = tf.keras.Sequential()
model.add(layers.Dense(25*25*256, use_bias=False, input_shape=(100,)))
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(layers.Reshape((25, 25, 256)))
assert model.output_shape == (None, 25, 25, 256) # Note: None is the batch size
model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))
assert model.output_shape == (None, 25, 25, 128)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False))
assert model.output_shape == (None, 50, 50, 64)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh'))
assert model.output_shape == (None, 100, 100, 1)
return model
我收到的错误是“ValueError:层顺序的输入 0 与层不兼容:输入形状的预期轴 -1 具有值 4,但接收到形状为 [100, 100] 的输入”。
解决方案
问题在于这条线
model.add(layers.Conv2D(128, (5, 5), strides=(2, 2), padding='same',input_shape=[100, 100, 1]))
RGB 通道值的输入通道值应为 3 而不是 1。
将 input_shape 替换为
input_shape=[100, 100, 3]
推荐阅读
- python - 哪个更糟 - 重复的代码或重复尝试/例外?
- vue.js - 使用 VueJs 的 JQuery 数据表中没有可用的数据问题
- python - re.sub() 通过多行替换
- html - 使用 css 选择器从所有行中选择第一个 td
- html - 在 matToolTip (Angular) 中呈现 html 内容
- c# - 如何仅从用户输入中侦听 DateTimePicker ValueChanged 事件
- java - 如何使用 mp4parser 获取 FPS?
- dialogflow-es - 在 Java 中实现 Dialogflow v2 webhook 的最佳方法是什么
- javascript - 如何使用 VS Code 设置字符串的智能感知以避免在 JavaScript 中键入无效值
- javascript - Jquery如何验证特定字符的输入并遵循特定模式