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

如何设置默认张量作为Keras模型输入 仅保留查询图像入参

问题根因

layers.Input(tensor=my_default_tensor)的作用是将外部已有张量接入模型计算图,不会为该输入位自动配置推理阶段的默认填充值,框架依然会将其识别为必填输入项,因此推理时仍要求传入对应数据,无法实现对用户隐藏的效果。

实现方案

直接重构推理专用模型即可,全程复用原训练好的模型权重,无需重新训练:

  • 第一步:将需要固定为默认值的图像数据转换为TensorFlow计算图常量,提前完成和训练阶段完全一致的预处理,对齐输入维度要求。
  • 第二步:新建仅用于接收Query图像的单一输入层,作为推理模型对用户暴露的唯一输入接口。
  • 第三步:将提前准备好的默认常量张量、新的Query输入按照原训练模型的输入顺序拼接,传入原训练模型得到输出。
  • 第四步:以新的Query输入层作为输入、原模型输出作为输出,打包生成独立的推理模型。
参考代码示例

假设原训练好的模型original_model接收两个输入:第一个是需要固定为默认值的参考图像集,第二个是用户传入的Query图像,输出为预测结果,参考实现如下:

import tensorflow as tf
from tensorflow import keras

# 替换为自己准备好的默认图像numpy数组,提前完成训练时同款预处理
default_images_np = your_preprocessed_default_image_data
# 转换为计算图内置常量
default_const = tf.constant(default_images_np, dtype=tf.float32)

# 构建唯一对外输入层,替换为实际业务中Query图像的尺寸、通道数配置
query_input = keras.Input(shape=(img_height, img_width, img_channels), name="query_image")

# 自动对齐batch维度:让默认张量的batch size和传入的Query图像batch size保持一致
batch_size = tf.shape(query_input)[0]
default_batch = tf.repeat(
    tf.expand_dims(default_const, axis=0), 
    repeats=batch_size, 
    axis=0
)

# 按原模型的输入顺序拼接后传入训练好的原模型,直接复用所有权重
model_output = original_model([default_batch, query_input])

# 打包成最终推理模型,仅暴露Query图像一个输入位
inference_model = keras.Model(inputs=query_input, outputs=model_output)
注意事项
  • 不要直接修改原训练模型的输入层属性,容易破坏计算图与权重的绑定关系,上述重构方式不会改动原模型的权重参数,无需微调。
  • 重构完成后导出SavedModel、TFLite等部署格式时,模型签名只会保留Query图像这一个输入项,默认图像部分完全内置在计算图中,用户调用时无需传入。
  • 不要使用Input(tensor=xxx)的方式实现默认输入,该方式绑定的张量依然会被框架识别为需要外部传入的签名输入,无法实现隐藏效果。

内容的提问来源于stack exchange,提问作者Luis Augusto Libório

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:54:17