我們經(jīng)常在numpy中會用到類似于label[:, :, :, :, 0] = 0這樣的切片賦值操作,那么在TensorFlow中應(yīng)該如何實現(xiàn)呢?
a = tf.Variable([[[1, 1, 1], [2, 2, 2]],[[3, 3, 3], [4, 4, 4]],[[5, 5, 5], [6, 6, 6]]])
with tf.Session() as sess:
sess.run(tf.global_variable_initializer())
sess.run(a[:2,:1,:].assign(-1*tf.ones_like(a[:2,:1,:]))) # 將a[:2,:1,:] 中的數(shù)值賦值為-1,注意assign函數(shù)中的參數(shù)不能直接賦-1,會報錯說不支持broadcast
sess.run(a)
輸出
**第一個輸出
array([[[-1, -1, -1],
[ 2, 2, 2]],
[[-1, -1, -1],
[ 4, 4, 4]],
[[ 5, 5, 5],
[ 6, 6, 6]]], dtype=int32)
**第二個輸出
array([[[-1, -1, -1],
[ 2, 2, 2]],
[[-1, -1, -1],
[ 4, 4, 4]],
[[ 5, 5, 5],
[ 6, 6, 6]]], dtype=int32)
說明tensor-a中的數(shù)值已經(jīng)被成功修改了。大功告成。
補充一個conditional slice assignment
例如我們需要讓a tensor中所有等于-1的地方都變?yōu)?,怎么操作呢
contition = tf.equal(a,-1)
sess.run(tf.where(condition, tf.zeros_like(condition, dtype=tf.int32), a))
# 這里的tf.where中的三個參數(shù)分別代表判斷條件,滿足條件的位置賦值矩陣以及不滿足條件的位置的賦值矩陣,要注意前兩個矩陣要同大小。
# 這里的意思就是,滿足a == -1的位置賦值為0,其他位置還是a原來的值