tensor的slice賦值

我們經(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原來的值
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容