На самом деле, этот вопрос более широко использует вещание характеристик тензорного потока,
который так же, как NumPy ( Broadcasting ). Broadcasting
избавляет от требования, чтобы форма операции между тензорами была одинаковой. Конечно, он также должен соответствовать определенным условиям.
Общие правила вещания:
При работе с двумя массивами, NumPy
сравнивает их формы поэлементно. Начинается с трейлинга
размеры, и продвигается вперед. Два измерения совместимы
когда
1. они равны или
2. один из них 1
Простой пример - одномерные тензоры, умноженные на скаляры.
import tensorflow as tf
start_vec = tf.constant((83,69,45))
b = start_vec * 2
with tf.Session() as sess:
print(sess.run(b))
[166 138 90]
Возвращаясь к вопросу, функция tf.expand_dims()
состоит в том, чтобы вставить измерение в форму тензора в указанной позиции axis
. Ваша исходная форма данных (3,)
. Вы получите форму a=tf.expand_dims(start_vec, 0)
, равную (1,3)
, когда ваш сет axis=0
. Вы получите форму b=tf.expand_dims(start_vec, 1)
, равную (3,1)
, когда ваш сет axis=1
.
.
Сравнивая правила broadcasting
, вы можете увидеть, что они удовлетворяют второму условию. Таким образом, их фактическая операция составляет
83,83,83 83,69,45
69,69,69 + 83,69,45
45,45,45 83,69,45