(编辑 wrt @ quirk的回答)
我在线阅读一些tensorflow代码并看到了这些陈述:
threshold = tf.select(input > RLSA_THRESHOLD, positive, negative)
Run Code Online (Sandbox Code Playgroud)
来源:https://github.com/Raverss/tensorflow-RLSA-NMS/blob/master/source.py#L31
positive是一个张量只是1's,negative同样大小的0's和输入是一些相同大小的热图(/张量)(所有类型tf.float32).
代码片段似乎合理地提前让我假设tf.cast(input > RLSA_THRESHOLD, tf.float32)如果没有特定的tf.select(...)表达原因,作者会使用它.特别是因为这会消除了对变量的需求positive和negative,并会节省内存,因为它们只是昂贵的冗余存储的方式0和1.
上述tf.select(...)表达式是否相当于tf.cast(input > RLSA_THRESHOLD, tf.float32)?如果没有,为什么不呢?
注意:我通常使用Keras,如果我在这里触摸一些非常微不足道的事情,我很抱歉.
嗯,RTD(阅读文档)!
tf.select根据张量中元素的布尔值positive从或张量中选择元素。negativecondition
tf.select(condition, t, e, name=None)
根据条件从 t 或 e 中选择元素。
t 和 e 张量必须具有相同的形状,并且输出也将具有该形状。
(来自官方文档。)
所以在你的情况下:
threshold = tf.select(input > RLSA_THRESHOLD, positive, negative)
input > RLSA_THRESHOLD将是一个张量bool或逻辑值(0或1符号),这将有助于从positive向量或negative向量中选择一个值。
例如,假设 aRLSA_THRESHOLD为 0.5,input向量是由 0 到 1 范围内的实连续值组成的 4 维向量。你的positive和negative向量本质上分别是[1, 1, 1, 1]和[0, 0, 0, 0]。input是[0.8, 0.2, 0.5, 0.6]。
threshold将[1, 0, 0, 1]。
注意: positive并且negative可以是任何类型的张量,只要尺寸与condition张量一致即可。比如说,“曾经positive”和“曾经”分别是“你本来会是” 。negative[2, 4, 6, 8][1, 3, 5, 7]threshold[2, 3, 5, 8]
对于我来说,代码片段似乎相当先进,假设
input > RLSA_THRESHOLD如果没有特定原因,作者就会使用tf.select.
这是有充分理由的。input > RLSA_THRESHOLD只会返回逻辑(布尔)值的张量。逻辑值与数值不能很好地混合。您不能将它们用于任何实际的数值计算。如果positive和/或negative张量是真实值的,您可能会要求您的threshold张量也具有真实值,以防您计划进一步使用它们。
相当于?
tf.selectinput > RLSA_THRESHOLD如果没有,为什么不呢?
不,他们不是。一个是函数,另一个是张量。
我将假定您想问:
相当于?
thresholdinput > RLSA_THRESHOLD如果没有,为什么不呢?
不,他们不是。如上所述,input > RLSA_THRESHOLD是一个数据类型为 的逻辑张量bool。threshold另一方面, 是一个与positive和具有相同数据类型的张量negative。
注意:您始终可以使用tensorflow中提供的任何转换方法将逻辑张量转换为数值(或任何其他支持的数据类型)张量。
| 归档时间: |
|
| 查看次数: |
5746 次 |
| 最近记录: |