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

关于tf.keras.preprocess_input对张量与numpy数组行为不一致的技术问询

关于preprocess_input函数行为不一致的疑问

我发现preprocess_input函数存在行为不一致的情况,该函数用于预处理图像,为所用特定预训练网络完成正确的数值归一化。经调试确认:

  • 当输入为tensor时,原输入不会被修改,函数返回处理后的新tensor;
  • 当输入为numpy数组时,函数既返回处理后的新数组,又会原地修改原数组。

以下是示例代码及对应输出:

Tensor输入示例

tensor = tf.ones(3)*100
print(tensor)
tensor2 = tf.keras.applications.mobilenet_v2.preprocess_input(tensor)
print(tensor)
print(tensor2)

输出:

tf.Tensor([100. 100. 100.], shape=(3,), dtype=float32)
tf.Tensor([100. 100. 100.], shape=(3,), dtype=float32)
tf.Tensor([-0.21568626 -0.21568626 -0.21568626], shape=(3,), dtype=float32)

Numpy数组输入示例

array = np.ones(3)*100
print(array)
array2 = tf.keras.applications.mobilenet_v2.preprocess_input(array)
print(array)
print(array2)
array+=1
print(array)
print(array2)

输出:

[100. 100. 100.]
[-0.21568627 -0.21568627 -0.21568627]       # <== 原输入被修改!!!
[-0.21568627 -0.21568627 -0.21568627]
[0.78431373 0.78431373 0.78431373]
[0.78431373 0.78431373 0.78431373]          # <== 原输入后续修改会同步影响返回值

技术疑问

  1. 为何该函数对tensor与numpy数组的处理行为不一致?
  2. 原地修改原numpy数组的设计有什么益处?
  3. 为何preprocess_input既返回新值又原地修改原输入?通常二者择一即可,这种设计容易引发混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:01:14