У меня есть проблема, с которой я боролся. Это связано с tf.matmul()
и его отсутствием в эфире.
Мне известно о похожей проблеме на https://github.com/tensorflow/tensorflow/issues/216, но tf.batch_matmul()
не похоже на решение для моего случая.
Мне нужно закодировать входные данные в виде 4D-тензора: X = tf.placeholder(tf.float32, shape=(None, None, None, 100))
Первое измерение — это размер пакета, второе — количество записей в пакете. Вы можете представить каждую запись как композицию ряда объектов (третье измерение). Наконец, каждый объект описывается вектором из 100 значений с плавающей запятой.
Обратите внимание, что я использовал None для второго и третьего измерений, потому что фактические размеры могут меняться в каждой партии. Однако для простоты сформируем тензор с реальными числами: X = tf.placeholder(tf.float32, shape=(5, 10, 4, 100))
Это шаги моего вычисления:
вычислить функцию каждого вектора из 100 значений с плавающей запятой (например, линейную функцию)
W = tf.Variable(tf.truncated_normal([100, 50], stddev=0.1))
Y = tf.matmul(X, W)
проблема: нет трансляции дляtf.matmul()
и нет успеха с использованиемtf.batch_matmul()
ожидаемой формы Y: (5, 10, 4, 50)применение среднего пула для каждой записи пакета (по объектам каждой записи):
Y_avg = tf.reduce_mean(Y, 2)
ожидаемая форма Y_avg: (5, 10, 50)
Я ожидал, что tf.matmul()
будет поддерживать вещание. Затем я нашел tf.batch_matmul()
, но все же похоже, что это не относится к моему случаю (например, W должен иметь как минимум 3 измерения, непонятно почему).
Кстати, выше я использовал простую линейную функцию (веса которой хранятся в W). Но в моей модели вместо этого у меня есть глубокая сеть. Итак, более общая проблема, с которой я сталкиваюсь, заключается в автоматическом вычислении функции для каждого среза тензора. Вот почему я ожидал, что tf.matmul()
будет иметь широковещательное поведение (если это так, возможно, tf.batch_matmul()
даже не понадобится).
С нетерпением ждем возможности учиться у вас! Алессио