tensorflow通过(不同范围的2d)切片列表更改/分配矩阵元素值
Posted
技术标签:
【中文标题】tensorflow通过(不同范围的2d)切片列表更改/分配矩阵元素值【英文标题】:tensorflow change/assign matrix element values by list of (different range of 2d) slices 【发布时间】:2019-08-29 10:03:55 【问题描述】:我有一个零矩阵(我们可以看成图片):
matrix = tf.zeros(name="matrix", shape=(4, 5), dtype=tf.int32)
以及在此matrix
上指示一些“框”(通过左上角和右下角顶点,可能重叠)的四分体张量:
(first_row, first_column, second_row, second_column)
这里,[first_row:second_row, first_column,second_column]
在matrix
上形成一个框。
问题是:如何使用切片[first_row:second_row, first_column,second_column]
或其他张量流函数将图片上的所有“装箱值”从0
分配/更改为1
?
更新:
输入:
matrix = tf.zeros(name="matrix", shape=(4, 5), dtype=tf.int32)
first_row = tf.constant([0,2])
first_column = tf.constant([2,1])
second_row = tf.constant([3,3])
second_column = tf.constant([3,3])
预期的输出(例如(0,2,3,3)
和(2,1,3,3)
):
array([[0, 0, 1, 1, 0],
[0, 0, 1, 1, 0],
[0, 1, 1, 1, 0],
[0, 1, 1, 1, 0]])
【问题讨论】:
你能给出输入和输出的例子吗?您可以更新您的问题。 【参考方案1】:这可能会有所帮助。但如果不是,您可以澄清您的问题。
import tensorflow as tf
tensor = tf.Variable(
[[0, 0, 1, 1, 0],
[0, 0, 1, 1, 0],
[0, 1, 1, 1, 0],
[0, 1, 1, 1, 0]])
with tf.Session() as sess :
sess.run( tf.global_variables_initializer() )
print(sess.run( tf.assign(tensor[0:1,2:3] , [[9]] )))
输出是这样的。
[[0 0 9 1 0]
[0 0 1 1 0]
[0 1 1 1 0]
[0 1 1 1 0]]
如果你把最后一行改成print(sess.run( tf.assign(tensor[0:1,2:4] , [[9,9]] )))
,你会得到
[[0 0 9 9 0]
[0 0 1 1 0]
[0 1 1 1 0]
[0 1 1 1 0]]
当我不确定分配的左侧在形状方面与右侧不匹配时,我会收到此错误。这应该对您有所帮助。
切片的左值形状 [1,2] 与右值形状 [1,1] 不匹配
示例print(sess.run( tf.assign(tensor[0:2,2:4] , [[9,9],[9,9]] )))
打印
[[0 0 9 9 0]
[0 0 9 9 0]
[0 1 1 1 0]
[0 1 1 1 0]]
【讨论】:
非常感谢!我通过指定它们的尺寸来解决左右值的一致性。以上是关于tensorflow通过(不同范围的2d)切片列表更改/分配矩阵元素值的主要内容,如果未能解决你的问题,请参考以下文章
使用 TensorFlow 的“IndexError:列表索引超出范围”错误