Paul Higazi
Paul Higazi

Reputation: 197

Tensorflow basics, tf.less calculation error

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

Answers (1)

user11530462
user11530462

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

Related Questions