Reputation: 197
Lets assume that i want to calculate the operation:
[[1 2 3 4 ], [1 [[1 2 3 4],
[5 6 7 8 ], 2 [10 12 14 16],
[9 10 11 12], x 3 = [27 30 33 36],
[13 14 15 16]] 4] [42 56 60 64]]
just tried to do it in tensorflow with the following approach:
inputs=tf.ones((2,10,10,5))
# generate random tensor in shape (10,10) filled with random number from 0 to 100
gram=tf.random.uniform(shape=(10,10), minval=0, maxval=100,dtype=tf.int32)
# defining a column vector filled with 10,20 ....
thresh=tf.constant([0,10,20,30,40,50,60,70,80,90], shape=[10,1],dtype=tf.int32)
# calculate less
outputs=tf.math.less(gram,thresh)
Using int32
or float32
leads to the same result. Actually the comparisons are wrong, here the output:
sess = tf.compat.v1.Session()
print(sess.run(gram))
print(sess.run(outputs))
gram tensor with random values
[[19 58 2 41 50 28 42 4 40 31]
[71 33 38 16 56 2 26 83 10 33]
[44 62 54 48 28 27 83 62 7 67]
[19 96 65 12 55 30 98 8 9 47]
[62 98 39 60 60 84 17 66 2 44]
[64 64 37 87 96 48 22 78 62 86]
[ 8 62 65 58 62 18 67 27 3 5]
[87 73 4 48 3 33 23 71 21 43]
[ 3 10 26 44 22 1 7 12 5 70]
[18 6 10 63 2 69 5 43 58 10]]
corresponding boolean mask
[[False False False False False False False False False False]
[False False False False False False True False False False]
[ True True False False True False True False True False]
[False False True False False False True False False False]
[False False False True False True False False False False]
[False True False True True False True True True True]
[ True True True False True False True True True True]
[False True False True False True False True True True]
[ True True True True True True True True True True]
[ True True True True True True True True True True]]
Compare the gram matrix and the result, for example (row 8, column 2
) 73<70 -> False
, but instead there is a TRUE
. How can i fix this and where does it come from. Thanks
Upvotes: 1
Views: 216
Reputation:
Providing the solution here (Answer Section), even though it is present in the Comment Section, for the benefit of the community.
As jdehesa correctly mentioned, Each time when you call run
the tensor gram
will get a new random value because you are using tf.random
. To get same value on every run
use tf.constant
.
The code,
print(sess.run(gram))
print(sess.run(outputs))
can be replaced with has resolved the issue
print(sess.run([gram, outputs]))
Complete working code is shown below:
import tensorflow as tf
with tf.compat.v1.Session() as sess:
inputs=tf.ones((2,10,10,5))
# generate random tensor in shape (10,10) filled with random number from 0 to 100
gram=tf.random.uniform(shape=(10,10), minval=0, maxval=100,dtype=tf.int32)
# defining a column vector filled with 10,20 ....
thresh=tf.constant([0,10,20,30,40,50,60,70,80,90], shape=[10,1],dtype=tf.int32)
# calculate less
outputs=tf.math.less(gram,thresh)
print(*sess.run([gram, outputs]), sep='\n')
Output:
[[79 44 24 67 53 90 0 57 74 86]
[47 17 24 81 16 12 22 52 63 70]
[17 94 71 76 23 66 76 59 77 19]
[17 43 12 90 27 28 27 89 39 20]
[22 49 38 49 56 70 77 40 71 13]
[29 73 2 45 30 2 88 65 65 88]
[79 15 31 44 19 2 74 4 7 35]
[89 67 76 66 4 14 63 29 90 6]
[86 51 61 17 79 78 64 67 33 63]
[45 16 30 93 75 42 86 93 63 84]]
[[False False False False False False False False False False]
[False False False False False False False False False False]
[ True False False False False False False False False True]
[ True False True False True True True False False True]
[ True False True False False False False False False True]
[ True False True True True True False False False False]
[False True True True True True False True True True]
[False True False True True True True True False True]
[False True True True True True True True True True]
[ True True True False True True True False True True]]
Upvotes: 1