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

使用TensorFlow和Keras构建模型时fit方法输入形状匹配错误

解决输入形状不匹配的ValueError问题

这问题我之前调模型时也踩过坑,核心原因很直接:你的训练数据形状和模型定义的输入形状完全对不上。

问题拆解

你提到输入数据的形状是(345, 720, 120, 3),意味着:

  • 345是样本数量
  • 每张图片的尺寸是720(高)×120(宽)×3(通道)

但你的模型第一层Lambda层定义的输入形状是(170,120,3),Keras在训练前会严格校验输入数据和模型输入的维度匹配度,自然就抛出了expected lambda_1_input to have shape (170, 120, 3)的错误。

两种解决方案

根据你的实际需求选一种就行:

方案1:调整输入数据到模型期望的尺寸

如果你确实想让模型接收170×120的图片,需要把所有训练图片的高度从720缩放到170。有两种方式:

  • 在模型里加入预处理层(推荐,这样预处理会整合到模型中,部署时更方便):
    from tensorflow.keras.layers import Resizing
    
    model = Sequential()
    # 先把720×120的图片缩放到170×120
    model.add(Resizing(170, 120, input_shape=(720,120,3)))
    model.add(Lambda(lambda x: (x / 255.0) - 0.5))
    model.add(Conv2D(24,(5,5),strides=(2,2),activation='relu'))
    # ... 后续层
    
  • 提前预处理数据:
    用OpenCV或Pillow批量调整图片尺寸,注意cv2.resize的参数是(宽, 高):
    import cv2
    import numpy as np
    
    resized_X_train = np.array([cv2.resize(img, (120, 170)) for img in X_train])
    # 之后用resized_X_train去训练
    

方案2:修改模型输入形状以匹配数据

如果你是不小心写错了输入形状,实际要处理的是720×120的图片,直接修正Lambda层的input_shape即可:

model = Sequential()
model.add(Lambda(lambda x: (x / 255.0) - 0.5, input_shape=(720,120,3)))
model.add(Conv2D(24,(5,5),strides=(2,2),activation='relu'))
# ... 后续层

额外提醒

如果你用的是ImageDataGenerator或者tf.data.Dataset加载数据,也要确保数据加载器输出的图片尺寸和模型输入一致,比如ImageDataGenerator的target_size要设为(170,120)或(720,120),对应你的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:40:43