Тензорный поток изменяет/назначает значения элементов матрицы по списку (разный диапазон 2d) срезов

У меня есть нулевая матрица (мы можем просмотреть ее как картинку):

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.

И вопрос: как я могу назначить/изменить все «значения в штучной упаковке» на изображении с 0 на 1, используя нарезку [first_row:second_row, first_column,second_column] или другие функции тензорного потока?

Обновлять:

Вход:

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]])

Можете ли вы привести примеры ввода и вывода? Вы можете обновить свой вопрос.

Mohan Radhakrishnan 08.04.2019 12:06
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
3
1
741
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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]]

Когда я не гарантирую, что левая сторона задания не соответствует правой стороне с точки зрения формы, я получаю эту ошибку. Это должно помочь вам.

sliced l-value shape [1,2] does not match r-value shape [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]]

Большое спасибо! Я решаю согласованность левого и правого значений, указав их размеры.

shizi 08.04.2019 13:44

Другие вопросы по теме