Тензорная тензорная операция различного размера по последнему измерению - PullRequest
3 голосов
/ 02 апреля 2019

У меня есть tensor1 с формой [1 128, 128 , 100], и у меня есть еще tensor2 с формой [1,128,128,1].Если я попытаюсь вычесть tensor1 - tensor2 из последнего измерения, будет ли tensor2 автоматически транслироваться на [1,128,128,100] и работать с вычитанием?Или будет вычтен только первый слой из tensor1 ??

Спасибо !!!!!!

1 Ответ

1 голос
/ 02 апреля 2019

Да, это будет транслироваться. Правила вещания в тензорном потоке такие же, как и для numpy:

При работе с двумя массивами NumPy сравнивает их формы поэлементно. Он начинается с конечных размеров и продвигается вперед. Два размера совместимы, когда

  1. они равны или

  2. один из них 1

Например:

import tensorflow as tf

v1 = tf.Variable(2*tf.ones([1, 2, 2, 3]))
v2 = tf.Variable(tf.ones([1, 2, 2, 1]))
diff = v1 - v2 

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(diff.eval()) # <-- `diff` contains only 'ones' because of broadcasting
# [[[[1. 1. 1.]
#    [1. 1. 1.]]
# 
#   [[1. 1. 1.]
#    [1. 1. 1.]]]]

print(diff.get_shape().as_list()) # [1, 2, 2, 3] <-- same shape as `v1`

В вашем случае конечный размер второго тензора равен 1, и по правилам он будет транслироваться. Остальные размеры равны.

...