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

Keras使用自定义图像生成器训练时报错期望1输入却收到2个张量如何解决

报错原因排查

错误的核心诱因是自定义数据生成器的返回值格式不符合Keras接口要求:

  • Keras中传入model.fit()的生成器,每次迭代必须返回一个长度为2的元组(输入张量, 标签张量),你当前代码使用yield [X, y]返回了列表结构,Keras会将列表内的两个张量统一识别为模型的输入张量
  • 你定义的模型只有1个输入节点,却收到了2个输入张量,因此触发参数不匹配的ValueError
可行解决方案

你只需要修改两处代码即可正常运行:

  1. 将生成器的返回值从列表改为元组,明确区分输入和标签
  2. 可选优化:将读取的uint8格式图像转换为float32格式并归一化到0~1区间,避免训练时数值溢出、loss计算异常

修改后的完整代码如下:

import numpy as np
import cv2
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Conv2D, Input

def load_image(file):
    image = cv2.imread(file, cv2.IMREAD_UNCHANGED)
    # 新增:归一化图像到0~1区间,转为float32
    image = image.astype(np.float32) / 255.0
    return image

file = './B2.jpeg'

def image_generator(image):
    i = 0
    while True:
        X = image
        y = image
        
        X = np.expand_dims(X, axis=0)
        y = np.expand_dims(y, axis=0)
        
        i = i + 1
        # 修改:返回元组而非列表
        yield (X, y)

inputs = Input(shape=(None, None, 3))
x = Conv2D(filters=3,
           kernel_size=3,
           padding='same',
           activation='relu',
           strides=1)(inputs)

model = Model(inputs=inputs, outputs=x)
model.compile(loss='mae',
              optimizer='adam')


image = load_image(file)
model.fit(image_generator(image), epochs=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:15:00