Reputation: 404
I am trying to use this function into a @tf.function decorato:
h and h2 is a tensor with shape [3,3]
def fn(h,i):
print(h[i])
return h[i]
tensor = [fn(h,i) for i in tf.range(tf.cast(tf.shape(h)[0],tf.int32)) if tf.reduce_all(tf.equal(h[i],h2[i])) ]
tf.print(tensor)
But i am getting this erro:
main_coat_rds.py:139 train_step *
pseudo_label_1,images_discard_rede1=predict_aug_images(rede_2,rede_1,img_rede1_aug_1,img_rede1_aug_2,img_rede1_aug_3,img_rede1_aug_4,img_rede1_aug_5,img_rede1_aug_6,img_rede1_aug_7,img_rede1_aug_8,images_discard_rede1,Correct_labels)
/vitor/codigo_noise_label/codigo_rds/utils_loss_function.py:289 predict_aug_images *
pred_match = [get_value_labels(all_predics,i) for i in tf.range(tf.cast(tf.shape(all_predics)[0],tf.int32)) if tf.reduce_all(tf.equal(all_predics[i],all_predics_aj[i])) ]
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py:503 __iter__
self._disallow_iteration()
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py:496 _disallow_iteration
self._disallow_when_autograph_enabled("iterating over `tf.Tensor`")
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py:474 _disallow_when_autograph_enabled
" indicate you are trying to use an unsupported feature.".format(task))
OperatorNotAllowedInGraphError: iterating over `tf.Tensor` is not allowed: AutoGraph did convert this function. This might indicate you are trying to use an unsupported feature.
What is another way that i can do it ?
Upvotes: 0
Views: 697
Reputation: 11631
Whenever you want to select some part of a Tensor based on a condition, a good option is to use a combination of tf.gather
and tf.where
.
Here, for example, to select the rows that are equal between h
and h2
, you can use:
tf.gather_nd(h, tf.where(tf.reduce_all(tf.equal(h, h2),axis=1)))
Upvotes: 1