Добавьте тензор только к части другого тензора

1

Я должен добавить два тензора, один с формой, кратной другой в направлении глубины. Вот пример

t1 = tf.constant(3, shape=[2, 2, 2], dtype=tf.float32)
t2 = tf.constant(1, shape=[2, 2, 1], dtype=tf.float32)

Я хочу использовать что-то вроде tf.add чтобы добавить второй тензор к первому, но только в первый слой третьего компонента формы. С числами

t1 = [[[3, 3], [3, 3]],
      [[3, 3], [3, 3]]]
t2 = [[[1, 1], [1, 1]]]

output = [[[4, 4], [4, 4]],
          [[3, 3], [3, 3]]]

Есть ли встроенная функция для этого?

Теги:
tensorflow

1 ответ

2
Лучший ответ

Добавьте первый "столбец" t1 с t2 и затем сравните его с остальными столбцами t1:

t1 = tf.constant(3, shape=[2, 2, 2], dtype=tf.float32)
t2 = tf.constant(1, shape=[2, 2, 1], dtype=tf.float32)
tf.InteractiveSession()

tf.concat((t1[...,0:1] + t2, t1[...,1:]), axis=2).eval()

#array([[[4., 3.],
#        [4., 3.]],

#       [[4., 3.],
#        [4., 3.]]], dtype=float32)

Обратите внимание, что ваш второй пример t2 имеет другую форму, то есть (1,2,2) вместо (2,2,1), и в этом случае срез и concat по первой оси:

tf.concat((t1[0:1] + t2, t1[1:]), axis=0).eval()

#array([[[4., 4.],
#        [4., 4.]],

#       [[3., 3.],
#        [3., 3.]]], dtype=float32)
  • 0
    Да, я объяснил это неправильно, но ваш метод работает! Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню