1. 程式人生 > >tensorflow判斷兩個tensor數值上是否完全相同

tensorflow判斷兩個tensor數值上是否完全相同

該問答中給出解答非常好,但是僅僅是針對向量形式,不能很好的應用於多維張量,因此,在這裡進行小小的修改。

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]

結果中可以清楚看到每次執行結果的不同之處。