【问题标题】:Keras Reshape doesn't seem to runKeras Reshape 似乎没有运行
【发布时间】:2023-12-08 09:21:01
【问题描述】:

我在 keras 中有一个简单的卷积自动编码器。我的原始输入是来自 csv 的平面数组,所以我想将它们从 (196,) 重塑为 (14,14,1)。按照 keras 文档,我做到了:

autoencoder = Sequential()
# first, reshape our (csv) inputs from (196,) to (14,14,1)
autoencoder.add(Reshape((14,14,1), input_shape=(196,)))
# encoding stage
autoencoder.add(Conv2D(16, (3,3), activation='relu', padding='same'))
autoencoder.add(MaxPooling2D((2, 2), padding='same'))
autoencoder.add(Conv2D(8, (3, 3), activation='relu', padding='same'))
autoencoder.add(MaxPooling2D((2, 2), padding='same'))
autoencoder.add(Conv2D(8, (3, 3), activation='relu', padding='same'))
autoencoder.add(MaxPooling2D((2, 2), padding='same'))
# decoding stage
autoencoder.add(Conv2D(8, (3, 3), activation='relu', padding='same'))
autoencoder.add(UpSampling2D((2, 2)))
autoencoder.add(Conv2D(8, (3, 3), activation='relu', padding='same'))
autoencoder.add(UpSampling2D((2, 2)))
autoencoder.add(Conv2D(16, (2, 2), activation='relu'))
autoencoder.add(UpSampling2D((2, 2)))
autoencoder.add(Conv2D(1, (3, 3), activation='sigmoid', padding='same'))

optimizer = optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.001)
autoencoder.compile(optimizer=optimizer, loss='binary_crossentropy')

但我得到了错误:ValueError: Error when checking target: expected conv2d_35 to have 4 dimensions, but got array with shape (2870, 196) 所以它似乎完全忽略了重塑。我犯了一些明显的错误吗?

【问题讨论】:

    标签: python tensorflow keras reshape


    【解决方案1】:

    问题不在于输入,而在于目标,因此您提供的y 值不会被重新整形。您的网络的最终输出是一个 4D 张量,您可以在其中提供 (2870, 196)

    仔细检查您传递给 fit 函数的目标数组(y 值)。

    【讨论】:

    • 好的,是的,这完全有道理。谢谢!
    • 快速跟进问题:有没有办法重塑我的输出?我无法让 Reshape(196,) 工作——它向TypeError: 'int' object is not iterable 抱怨。我尝试了在其他地方找到的 Lambda 示例,但 coreml(我的最终目的地)不会转换 Lambda 层。