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

使用预训练Keras模型时出现输入张量错误该如何解决

报错原因
  • 调用Flatten层时直接传入了VGG19模型对象本身,而不是模型输出的张量。Keras层仅支持接收张量作为输入,不能直接传入模型实例。
  • 自定义输入为4通道格式,而加载的预训练VGG19默认适配3通道RGB输入,直接调用会出现维度不匹配问题,需要提前做通道转换处理。
修正后可运行代码
from tensorflow import keras
from tensorflow.keras import layers
from keras.applications.vgg19 import VGG19

inputs = layers.Input(shape = (32,32,4))
# 新增卷积层将4通道输入转为3通道,适配VGG19的输入要求
x = layers.Conv2D(3, (3,3), padding='same', activation='relu')(inputs)

vgg_model = VGG19(weights='imagenet', include_top=False, input_shape=(32,32,3))
vgg_model.trainable = False

# 先将输入张量传入VGG模型得到特征张量,再接入后续自定义层
x = vgg_model(x)
x = layers.Flatten(name='flatten')(x)
x = layers.Dense(512, activation='relu', name='fc1')(x)
x = layers.Dense(512, activation='relu', name='fc2')(x)
x = layers.Dense(1,name='predictions')(x)

new_model = keras.models.Model(inputs=inputs, outputs=x)
new_model.compile(optimizer='adam', loss='mean_squared_error', 
                   metrics=['mae'])
关键改动说明
  • 给VGG19显式指定input_shape参数,匹配输入图像尺寸,避免动态推断维度出错
  • 新增1层卷积完成4通道到3通道的转换,对齐预训练模型的输入要求
  • 修正了张量传递链路:先将输入张量传入VGG模型得到输出特征张量,再传入后续的Flatten和全连接层,符合Keras函数式API的调用规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:45:05