You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow Sequential模型输入张量异常及数据集适配问题求助

自制AutoEncoder数据集报错排查

问题现象

从TensorFlow官方AutoEncoder入门示例复制的代码可正常处理Fashion MNIST数据集,但使用自制数据集时出现冗长警告及ValueError:

  • 自制x_train形状:
tf.shape(x_train)
# 输出 <tf.Tensor: shape=(3,), dtype=int32, numpy=array([169,28,28])>
  • MNIST数据集x_train形状:
tf.shape(x_train)
# 输出 <tf.Tensor: shape=(3,), dtype=int32, numpy=array([60000,28,28])>

自制数据集生成代码:

dir_path='auto/ttt/'
data=[]
x_train=[]
for i in os.listdir(dir_path):
    img=image.load_img(dir_path+'//'+i,color_mode='grayscale',target_size=(28,28))  
    data=np.array(img)
    data=data/255.0
    x_train.append(data)

收到的警告:

WARNING:tensorflow:Layers in a Sequential model should only have a single input tensor. Received: inputs=(<tf.Tensor 'IteratorGetNext:0' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:1' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:2' shape=(None, 28) 
dtype=float32>, <tf.Tensor 'IteratorGetNext:3' shape=(None, 28) 
dtype=float32>, <tf.Tensor 'IteratorGetNext:4' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:5' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:6' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:7' shape=(None, 28) dtype=flo...

触发的ValueError:

ValueError: Exception encountered when calling layer "sequential_4" (type Sequential).
        
Layer "flatten_2" expects 1 input(s), but it received 169 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:1' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:2' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:3' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:4' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:5' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:6' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:7' shape=(None, 28) dtype=float32>, <tf.Tensor 'IteratorGetNext:8' shape=(None, 28) dtype=float3...

问题根源

自制的x_train是Python列表,而非NumPy数组或TensorFlow张量。虽然tf.shape返回的形状看似符合要求,但当将列表传入Keras模型时,模型会把列表中的每一个28x28元素当作独立的输入张量,导致原本应该是1个批量输入(形状(169,28,28))变成了169个单独的输入,与模型期望的输入格式不匹配,从而触发警告和错误。

修复方案

在数据集生成循环结束后,将Python列表转换为NumPy数组或TensorFlow张量:

修改后的代码

import numpy as np
from tensorflow.keras.preprocessing import image
import os

dir_path='auto/ttt/'
x_train=[]
for i in os.listdir(dir_path):
    img=image.load_img(dir_path+'//'+i,color_mode='grayscale',target_size=(28,28))  
    data=np.array(img)
    data=data/255.0
    x_train.append(data)
# 关键:将列表转为NumPy数组
x_train = np.array(x_train)
# 或者转为TensorFlow张量:x_train = tf.convert_to_tensor(x_train)

转换后,x_train会成为标准的批量张量,形状为(169,28,28),与MNIST数据集格式一致,模型即可正常处理。

内容的提问来源于stack exchange,提问作者HARIS AAMIR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:18:22