Пакетная операция с тензорами в TensorFlow

У меня есть пакеты изображений, представленные как тензор TensorFlow (скажем, Tensor 1) формы (2,1024,1024,1) формы (B,H,W,C), где B - размер пакета 2, H и W - размеры изображения 1024 и C - количество каналов. Каждый элемент этого тензора (то есть каждый пиксель) хранит кортеж (a,b), где как a, так и b находятся в диапазоне 0 и 255.

У меня есть другой тензор (скажем, тензор 2) формы (256,256), для которого каждый элемент хранит одно значение между 0 и 255.

Учитывая эту настройку, у меня возникает следующий вопрос.

Я хочу заменить каждое значение элемента в тензоре 1 соответствующим значением элемента в тензоре 2. Например, предположим, что элемент, заданный индексом (1,200,500,1) в тензоре 1, содержит значение (100,20). Я хочу найти значение, хранящееся в Tensor 2 в местоположении пикселя (100,200), и изменить запись в (1,200,500,1) этим значением.

Как я могу сделать это наиболее эффективным способом для всей партии?

Пожалуйста, дайте мне знать, если что-то неясно. Я новичок в TensorFlow, поэтому буду благодарен за любую помощь.


person Silver moon    schedule 16.05.2020    source источник


Ответы (1)


чтобы заменить значение элемента в Tensor 1 на соответствующее значение элемента в Tensor 2, попробуйте этот способ

tensor1 = tf.Variable(tf.zeros((2,1024,1024,1)), trainable=False)
tensor2 = tf.constant(np.random.randint(0,255, (255,255,1)), dtype='float32')

tensor12 = tensor1[1,200,500].assign(tensor2[100,200])

в этом примере вы заменили элемент в позиции (1,200,500,1) Tensor 1 на элемент в позиции (100,200) Tensor 2


batch_dim = 2
tensor1 = tf.Variable(tf.zeros((batch_dim,1024,1024,1)), trainable=False)
tensor2 = tf.constant(np.random.randint(0,255, (1,255,255,1)), dtype='float32')

tensor12 = tensor1[:,:tensor2.shape[1],:tensor2.shape[2]].assign(tf.repeat(tensor2, batch_dim, axis=0))

с помощью этих строк вы присваиваете все значение тензора2 первой (255,255) позиции в тензоре1 для ВСЕХ выборок партии

person Marco Cerliani    schedule 16.05.2020