【问题标题】:Input and Output shape mismatched when using binary cross entropy | Keras tf autoencoder使用二元交叉熵时输入和输出形状不匹配 | Keras tf 自动编码器
【发布时间】:2019-08-24 07:21:39
【问题描述】:

我正在构建一个接收 16x16 平面图像的自动编码器,但我不断收到以下错误:

ValueError: A target array with shape (999, 16, 16, 256) was passed for an output of shape (None, 256) while using as loss `binary_crossentropy`. This loss expects targets to have the same shape as the output.

我的尝试:我认为我必须在 topk 层之后重塑解码器内部的张量,但它没有解决错误,只是输出了更多错误。我在下面评论了我的尝试。 我相信我需要进行某种类型的重塑,以便输入形状和输出形状相互匹配,以便二进制交叉熵损失可以工作。

这是我的代码的最小工作示例:

encoding_dim = 16
input_img = tf.keras.layers.Input(shape=(16, 16, 256), name ="input")
# flatten your images
flatten = tf.keras.layers.Flatten()(input_img)
encoded = tf.keras.layers.Dense(encoding_dim, activation='relu')(flatten)
encoded2 = tf.keras.layers.Dense(256, activation='sigmoid')(encoded)
# top_k layer
topk = tf.keras.layers.Lambda(lambda x: tf.nn.top_k(x, k=int(int(x.shape[-1])/2),
                                                sorted=True,
                                                name="topk").values)(encoded)
decoded = tf.keras.layers.Dense(128, activation='relu')(topk) 
decoded2 = tf.keras.layers.Dense(256, activation='sigmoid')(decoded)
#decoded3 = tf.keras.layers.Reshape((16,16,256))(decoded2)
autoencoder = tf.keras.Model(input_img, decoded2)
autoencoder.compile(optimizer = 'adadelta', 
                    loss='binary_crossentropy')
autoencoder.fit(x_train, x_train,
            epochs=100,
            batch_size=256,
            shuffle=False,
            validation_data=(x_test, x_test))

【问题讨论】:

  • 你能把计算损失的部分也贴出来吗?
  • @gorjan 更新了!
  • 你能详细说明(999, 16, 16, 256)的形状吗?

标签: python tensorflow keras deep-learning


【解决方案1】:

目前,您的输入形状是(batch, 16, 16, 256)

如果您想将batch 明确指定为256,您应该在Input 层中使用batch_shape 参数,而不是shape。但是您不应该这样做,因为最好保持灵活性以防您想更改它(或者批次大小不等,这通常是这种情况)。

你的输出必须是相同的形状,所以它应该是keras.layers.Dense(16 * 16, activation="sigmoid")keras.layers.Reshape((16, 16)) 在最后一个输出节点。请注意,您没有在任何地方指定批次,只指定其余维度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-13
    • 2021-07-10
    • 2018-11-03
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多