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)切片列表更改/分配矩阵元素值的主要内容,如果未能解决你的问题,请参考以下文章

Python 2D 列表切片

使用 TensorFlow 的“IndexError:列表索引超出范围”错误

如何在 Qt 中创建 3D 对象模型的 2D 切片?

如何在 TensorFlow 中对批次进行切片并在每个切片上应用操作

Python中切片的应用

Python中切片的应用