Keras自编码器报错:model_3层期望1个输入却收到64个张量如何解决
问题解决方法
根本原因
报错的核心是输入数据格式不符合Keras/TensorFlow模型的要求:你传入训练的x_train和y_train是长度为64的Python列表,框架会默认将列表内的每一个元素识别为一个独立的输入张量,因此会触发报错:
ValueError: Layer "model_3" expects 1 input(s), but it received 64 input tensors.
模型的卷积层本身会自动识别输入的第一个维度为批次维度,不需要额外做特殊配置,你只需要修正输入数据的格式即可。
修复步骤
- 第一步:将列表格式的训练数据转换为批量的numpy数组,转换后数组的第一个维度会自动对应批次大小64:
import numpy as np # 转换后数组形状为 (64, 128, 128, 3) x_train = np.array(x_train) y_train = np.array(y_train)
- 第二步:确认输入层定义正确,输入形状只需要指定单样本的维度,不需要包含批次维度:
from tensorflow.keras.layers import Input input = Input(shape=(128, 128, 3))
- 第三步:验证数据格式,转换完成后打印
x_train.shape,输出为(64, 128, 128, 3)即为正确,再传入模型训练即可。
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

