日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tensorflow修改张量特定位置元素的值

發布時間:2024/7/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

解決方法:
張量切片,再拼接。比如:

tensor_1 = tf.constant([x for x in range(1,10)]) # 切片 part1 = tensor_1[:4] part2 = tf.constant([0]) # 要修改的元素 part3 = tensor_1[5:] # 拼接 new_tensor = tf.concat([part1,part2,part3], axis=0)

值得注意的一點:如果在進行這樣的操作的時候代碼報錯,記得檢查每個 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修改张量特定位置元素的值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。