关于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] # <== 原输入后续修改会同步影响返回值
技术疑问
- 为何该函数对tensor与numpy数组的处理行为不一致?
- 原地修改原numpy数组的设计有什么益处?
- 为何
preprocess_input既返回新值又原地修改原输入?通常二者择一即可,这种设计容易引发混淆。
内容的提问来源于stack exchange,提问作者gnoodle
相关产品推荐
相关产品推荐

