Tensorflow修改张量特定位置元素的值
生活随笔
收集整理的這篇文章主要介紹了
Tensorflow修改张量特定位置元素的值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
張量和array一樣可以通過切片獲取,但是張量不可以直接修改某個值。
可以理解為張量具有“只讀”的模式。
如果按照數組修改某個值的方式處理的話,會報錯:
import tensorflow as tf tensor_1 = tf.constant([x for x in range(1,10)]) tensor_1[4] = 0 # TypeError: 'Tensor' object does not support item assignment解決方法:
將張量切片,再拼接。比如:
值得注意的一點:如果在進行這樣的操作的時候代碼報錯,記得檢查每個 part 的維度,大概率是維度這里出了問題。
牢記:原來張量是幾維,最后要拼成幾維。(比如你的張量是3維的,先要切分成三個2維的,再將二維張量切成1維,修改拼接成2維,再拼接成3維)
下面舉一個三維拼接的例子:
import tensorflow as tf import numpy as npclass tttest():def __init__(self):self.tensor_1 = tf.placeholder(tf.int32, [None, 3])self.part1 = self.tensor_1[:3]self.part2 = self.tensor_1[3]self.part2_1 = self.part2[:1]self.part2_2 = tf.constant([10])self.part2_3 = self.part2[2:]self.part2 = tf.expand_dims(tf.concat([self.part2_1, self.part2_2, self.part2_3], axis=0),0)self.part3 = self.tensor_1[4:]self.t = tf.concat([self.part1, self.part2, self.part3], axis=0) # 這樣寫是正確的# self.tensor_1 = tf.concat([self.part1, self.part2, self.part3], axis=0) # 這樣會報錯with tf.Session() as sess:init = tf.global_variables_initializer()sess.run(init)fd = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3], [4, 5, 6], [7, 8, 9]])a = tttest()print("tensor_1", sess.run(a.part1, {a.tensor_1:fd}))print("tensor_2", sess.run(a.part2, {a.tensor_1:fd}))print("tensor_3", sess.run(a.part3, {a.tensor_1:fd}))print("tensor_3", sess.run(a.t, {a.tensor_1: fd}))其中,如果將修改后的值還是賦給 tensor_1 會報錯如下:
InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder' with dtype int32 and shape [?,3][[Node: Placeholder = Placeholder[dtype=DT_INT32, shape=[?,3], _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]關于placeholder需要注意的是:不可以重新賦值給placeholder類型的,因為這樣會使得 feedfic 的時候 tensorflow 找到兩個名字一樣但是一個是 placeholder 類型,一個不是,必然會報錯。
總結
以上是生活随笔為你收集整理的Tensorflow修改张量特定位置元素的值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android官方开发文档Trainin
- 下一篇: Mac 终端提示:The default