自动编码器:层“model_3”需要 1 个输入,但它接收到 64 个输入张量

Posted

技术标签:

【中文标题】自动编码器:层“model_3”需要 1 个输入,但它接收到 64 个输入张量【英文标题】:Autoencoder: Layer "model_3" expects 1 input(s), but it received 64 input tensors 【发布时间】:2022-01-10 22:42:09 【问题描述】:

我有两个长度为 64 的批次。每个索引都是一个大小为 (128、128、3) 的 ndarray。

我的代码:

ae_encoder = Conv2D(32, (2,2), padding='same')(input)
ae_encoder = LeakyReLU()(ae_encoder)
ae_encoder = Flatten()(ae_encoder)
ae_encoder_output = Dense(Z_DIM, activation='relu')(ae_encoder) 

我似乎无法找到为什么它将整批 64 号)视为不同的通道。它不应该在这些批次中迭代 ndarray 吗?

错误:

ValueError: Layer "model_3" expects 1 input(s), but it received 64 input tensors.

更新 1 x_train 和 y_train 都是长度为 64 的列表,每个索引的形状都是 (128, 128, 3)。

示例输入(输入非常大,因此无法完全复制)

【问题讨论】:

显示整个模型并提供虚拟数据。 @AloneTogether 我已经更新了这个问题。请看一看。 【参考方案1】:

如果您尝试实现一个普通的自动编码器,其中输入形状应该等于输出形状,那么您必须将最后一个解码器层更改为:

ae_decoder_output = tf.keras.layers.Conv2D(3, (3,3), activation='sigmoid', padding='same',strides=(1,1))(ae_decoder)

导致输出形状(None, 128, 128, 3)。此外,您需要确保您的数据具有(samples, 128, 128, 3) 的形状。

【讨论】:

以上是关于自动编码器:层“model_3”需要 1 个输入,但它接收到 64 个输入张量的主要内容,如果未能解决你的问题,请参考以下文章

用于 keras 中可变大小图像的全卷积自动编码器

如何将多个输入和嵌入合并到单个输入层

CNNRNNDNN自动编码器DBRN的发展历程

keras:将一个模型的输出作为另一个模型的部分输入。

深度学习算法实践15---堆叠去噪自动编码机(SdA)原理及实现

Conv Autoencoder 层级数