自动编码器:层“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 个输入张量的主要内容,如果未能解决你的问题,请参考以下文章