(edited w.r.t. @quirk's answer)
I was reading some tensorflow-code online and saw this statements:
threshold = tf.select(input > RLSA_THRESHOLD, positive, negative)
source: https://github.com/Raverss/tensorflow-RLSA-NMS/blob/master/source.py#L31
positive Is a tensor with just 1's, negative also of the same size with 0's and input is some heatmap(/tensor) of the same size (all of type tf.float32).
The code snippet seems reasonably advanced for me to assume that the authors would have just used tf.cast(input > RLSA_THRESHOLD, tf.float32) if there was no specific reason for the tf.select(...) expression. Especially since this would have eliminated the need for the variables positive and negative, and would save memory, as they are just expensively redundant ways of storing 0 and 1.
Is the aforementioned tf.select(...) expression equivalent to tf.cast(input > RLSA_THRESHOLD, tf.float32)? If not, why not?
Note: I usually use Keras, and am sorry if I'm touching something very trivial here.
tf. select selects elements from positive or negative tensors based on the boolness of the elements in the condition tensor.
You can use tf. function to make graphs out of your programs. It is a transformation tool that creates Python-independent dataflow graphs out of your Python code. This will help you create performant and portable models, and it is required to use SavedModel .
Creates a tensor of all ones that has the same shape as the input.
This operation extracts a slice of size size from a tensor input_ starting at the location specified by begin . The slice size is represented as a tensor shape, where size[i] is the number of elements of the 'i'th dimension of input_ that you want to slice.
Umm, RTD(Read the docs)!
tf.select selects elements from positive or negative tensors based on the boolness of the elements in the condition tensor.
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.
(from the official docs.)
So in your case:
threshold = tf.select(input > RLSA_THRESHOLD, positive, negative)
input > RLSA_THRESHOLD will be a tensor of bool or logical values (0 or 1 symbolically), which will help choose a value from either the positive vector or the negative vector.
For example, say you have a RLSA_THRESHOLD of 0.5 and your input vector is a 4-dimensional vector of real continuous values ranging from 0 to 1. Your positive and negative vectors are essentially [1, 1, 1, 1] and [0, 0, 0, 0], respectively. input is [0.8, 0.2, 0.5, 0.6].
threshold will be [1, 0, 0, 1].
NOTE: positive and negative could be any kind of tensor as long as the dimensions agree with the condition tensor. Had positive and negative been, say, [2, 4, 6, 8] and [1, 3, 5, 7] respectively, your threshold would have been [2, 3, 5, 8].
The code snippet seems reasonably advanced for me to assume that the authors would have just used
input > RLSA_THRESHOLDif there was no specific reason for thetf.select.
There is a very good reason for that. input > RLSA_THRESHOLD would simply return a tensor of logical (boolean) values. Logical values do not mix well with numerical values. You cannot use them for any realistic numerical computation. Had the positive and/or negative tensors been real valued, you might have required your threshold tensor to also have real values, in case you planned to use them further along.
Is the
tf.selectequivalent toinput > RLSA_THRESHOLD? If not, why not?
No they are not. One is a function, the other is a tensor.
I am going to give you the benefit of doubt and assume you meant to ask:
Is the
thresholdequivalent toinput > RLSA_THRESHOLD? If not, why not?
No they are not. As explained above, input > RLSA_THRESHOLD is a logical tensor with a data type of bool. threshold, on the other hand, is a tensor with the same data type as positive and negative.
NOTE: You can always cast your logical tensors to numerical (or any other supported data type) tensors using any of the casting methods available in tensorflow.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With