Изменение значений определенного столбца тензора - PullRequest
0 голосов
/ 26 ноября 2018

Я хочу перезаписать значения определенного столбца 3-мерного тензора (размер пакета, длина последовательности, количество классов) с помощью 2-мерного тензора (размер пакета, длина последовательности).Я пробовал следующее присваивание значения на numpy во время отладки и работал отлично, но не уверен, как сделать то же самое на тензор.

Numpy Solution:

    Tensor A shape [50,4,4]
    Tensor B shape [50,4]

  * A[:,:,0]=b[:,:] 
    Tensor A shape is [50,4,4]

Example: 
    A[1]: 
        [[0.2,0.6,0.1,0.02],
        [0.3,0.4,0.5,0.12],
        [0.2,0.46,0.31,0.02],
        [0.2,0.1,0.2,0.03]]
    B[1]:
        [0,1,1,0]
    A*[1]:
        [[0,0.6,0.1,0.02],
        [1,0.4,0.5,0.12],
        [1,0.46,0.31,0.02],
        [0,0.1,0.2,0.03]]

Я знаю, что назначение элементов не поддерживается на тензорах, но мне было интересно, есть ли способ без потери данных ref-тензора.

1 Ответ

0 голосов
/ 26 ноября 2018

Я думаю, что в этом случае проще всего будет:

import tensorflow as tf

a = tf.placeholder(tf.float32, [None, None, None])
b = tf.placeholder(tf.float32, [None, None])
a_star = tf.concat([b[:, :, tf.newaxis], a[:, :, 1:]], axis=-1)
# Test
with tf.Session() as sess:
    print(sess.run(a_star, feed_dict={
        a: [[[0.2 , 0.6 , 0.1 , 0.02],
             [0.3 , 0.4 , 0.5 , 0.12],
             [0.2 , 0.46, 0.31, 0.02],
             [0.2 , 0.1 , 0.2 , 0.03]]],
        b: [[0, 1, 1, 0]]
    }))

Вывод:

[[[0.   0.6  0.1  0.02]
  [1.   0.4  0.5  0.12]
  [1.   0.46 0.31 0.02]
  [0.   0.1  0.2  0.03]]]

Я предложил более гибкую операцию замены для смежных срезов в Проблема TensorFlow# 18383 , но в этом случае это, вероятно, проще и быстрее.

...