tensorflow判斷兩個tensor數值上是否完全相同
阿新 • • 發佈:2018-12-19
該問答中給出解答非常好,但是僅僅是針對向量形式,不能很好的應用於多維張量,因此,在這裡進行小小的修改。
a=tf.constant([[[1,1],[1,0]],[[0,0],[1,1]]]) b=tf.constant([[[1,0],[1,0]],[[1,0],[1,0]]]) aeqb = tf.cast(tf.equal(a,b),tf.int32) aeqb_int = tf.to_int32(aeqb) result_0 = tf.equal(a,b) # 比較兩個tensor中對應位置值是否相同 result_1 = tf.equal(tf.reduce_sum(aeqb_int,2),tf.reduce_sum(tf.ones_like(aeqb_int),2)) # 比較最後一個維度上的tensor是否相同,因為例子中只有三個維度,所以reduce_sum中的引數直接使用2,同時也可使用-1 result_2 = tf.equal(tf.reduce_sum(tf.cast(result_1,tf.int32),1),tf.reduce_sum(tf.ones_like(tf.cast(result_1,tf.int32)),1)) # 比較倒數第二維上的tensor是否相同,但是需要前一個的結果。同理,reduce_sum引數可以為-2 sess=tf.Session() print("a:\n",sess.run(a)) print("----------------------------------") print("b:\n",sess.run(b)) print("----------------------------------") print("result_0:\n",sess.run(result_0)) print("----------------------------------") print("result_1:\n",sess.run(result_1)) print("----------------------------------") print("result_2:\n",sess.run(result_2))
然後是執行結果:
a: [[[1 1] [1 0]] [[0 0] [1 1]]] ---------------------------------- b: [[[1 0] [1 0]] [[1 0] [1 0]]] ---------------------------------- result_0: [[[ True False] [ True True]] [[False True] [ True False]]] ---------------------------------- result_1: [[False True] [False False]] ---------------------------------- result_2: [False False]
結果中可以清楚看到每次執行結果的不同之處。