微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – tf.select有什么用

(编辑w.r.t. @ quirk的回答)

我在线阅读一些tensorflow代码并看到了这些陈述:

threshold = tf.select(input > RLSA_THRESHOLD, positive, negative)

来源:https://github.com/Raverss/tensorflow-RLSA-NMS/blob/master/source.py#L31

正是一个只有1的张量,负的也是相同大小的0和输入是一些相同大小的热图(/张量)(所有类型为tf.float32).

如果tf.select(…)表达式没有特定的原因,那么代码片段对我来说似乎比较合理地假设作者会使用tf.cast(输入> RLSA_THRESHOLD,tf.float32).特别是因为这将消除对正变量和负变量的需求,并且将节省存储器,因为它们只是存储0和1的昂贵冗余方式.

前面提到的tf.select(…)表达式是否等同于tf.cast(输入> RLSA_THRESHOLD,tf.float32)?如果没有,为什么不呢?

注意:我通常使用Keras,如果我在这里触摸一些非常微不足道的事情,我很抱歉.

解决方法:

嗯,RTD(阅读文档)!

tf.select基于条件张量中的元素的boolness选择来自正或负张量的元素.

tf.select(condition, t, e, name=None)
Selects elements from t or e, depending on condition.
The t, and e tensors must all have the same shape, and the output will also have that shape.

(来自官方文档.)

所以在你的情况下:

threshold = tf.select(输入> RLSA_THRESHOLD,正面,负面)

输入> RLSA_THRESHOLD将是bool或逻辑值的张量(符号为0或1),这将有助于从正向量或负向量中选择一个值.

例如,假设您有一个0.5的RLSA_THRESHOLD,并且您的输入向量是从0到1的实际连续值的4维向量.您的正向和负向向基本上是[1,1,1,1]和[0,分别为0,0,0].输入为[0.8,0.2,0.5,0.6].

阈值将是[1,0,0,1].

注意:只要尺寸与条件张量一致,正负可以是任何类型的张量.如果有正面和负面,分别是[2,4,6,8]和[1,3,5,7],那么你的门槛就是[2,3,5,8].

The code snippet seems reasonably advanced for me to assume that the authors would have just used input > RLSA_THRESHOLD if there was no specific reason for the tf.select.

这是有充分理由的.输入> RLSA_THRESHOLD只会返回一个逻辑(布尔)值的张量.逻辑值与数值不能很好地混合.您不能将它们用于任何实际的数值计算.如果正和/或负张量是真正有价值的,那么您可能需要阈值张量也有实际值,以防您计划进一步使用它们.

Is the tf.select equivalent to input > RLSA_THRESHOLD? If not, why not?

不,他们不是.一个函数,另一个是张量.

我将给你怀疑的好处,并假设你打算问:

Is the threshold equivalent to input > RLSA_THRESHOLD? If not, why not?

不,他们不是.如上所述,输入> RLSA_THRESHOLD是一个逻辑张量,数据类型为bool.另一方面,阈值是具有与正面和负面相同数据类型的张量.

注意:您始终可以使用中提供的任何casting方法将逻辑张量转换为数字(或任何其他支持的数据类型)张量.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐