更改张量流中张量的比例

新手上路,请多包涵

对不起,如果我搞砸了标题,我不知道该如何表达。无论如何,我有一组值的张量,但我想确保张量中的每个元素的范围都在 0 - 255 之间(或者 0 - 1 也有效)。但是,我不想像 softmax 那样让所有值加起来等于 1 或 255,我只想缩小值。

有什么办法吗?

谢谢!

原文由 agupta231 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 373
2 个回答

您正在尝试规范化数据。一个经典的归一化公式是这样的:

 normalize_value = (value − min_value) / (max_value − min_value)

tensorflow 上的实现如下所示:

 tensor = tf.div(
   tf.subtract(
      tensor,
      tf.reduce_min(tensor)
   ),
   tf.subtract(
      tf.reduce_max(tensor),
      tf.reduce_min(tensor)
   )
)

张量的所有值都将介于 0 和 1 之间。

重要提示:确保张量具有浮点/双精度值,否则输出张量将只有零和一。如果你有一个整数张量,请先调用它:

 tensor = tf.to_float(tensor)

更新:从 tensorflow 2 开始, tf.to_float() 已被弃用,而是应该使用 tf.cast()

 tensor = tf.cast(tensor, dtype=tf.float32) # or any other tf.dtype, that is precise enough

原文由 Will Glück 发布,翻译遵循 CC BY-SA 4.0 许可协议

根据维基百科中的 特征缩放,您还可以尝试 Scaling to unit length:

在此处输入图像描述

可以使用这段代码来实现:

 In [3]: a = tf.constant([2.0, 4.0, 6.0, 1.0, 0])
In [4]: b = a / tf.norm(a)
In [5]: b.eval()
Out[5]: array([ 0.26490647,  0.52981293,  0.79471946,  0.13245323,  0.        ], dtype=float32)

原文由 Lerner Zhang 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题