У меня есть некоторые данные, представленные input_x
. Это тензор неизвестного размера (должен быть введен партией), и каждый элемент имеет размер n
. input_x
подвергается tf.nn.embedding_lookout
, так что embed
теперь имеет размеры [?, n, m]
, где m
- размер внедрения, а ?
относится к неизвестному размеру партии.Tensorflow - матрица входной матрицы с данными пакета
Это описано здесь:
input_x = tf.placeholder(tf.int32, [None, n], name="input_x")
embed = tf.nn.embedding_lookup(W, input_x)
Я сейчас пытаюсь умножить каждый образец в моих входных данных (которая теперь является матрица вложения) по переменной матрицы, U
, и я не могу чтобы узнать, как это сделать.
Сначала я попытался использовать tf.matmul
, но он дает ошибку из-за несоответствия в фигурах. Затем я попытался следующие, расширяя размерность U
и применяя batch_matmul
(я также пытался функцию от tf.nn.math_ops.
, результат был тот же):
U = tf.Variable(...)
U1 = tf.expand_dims(U,0)
h=tf.batch_matmul(embed, U1)
Это проходит первоначальную компиляцию, но тогда, когда фактические данные приложенное, я получаю следующее сообщение об ошибке:
In[0].dim(0) and In[1].dim(0) must be the same: [64,58,128] vs [1,128,128]
Я также знаю, почему это происходит - я копировал измерение U
и теперь 1
, но размер minibatch, 64
, Безразлично» t подходит.
Как я могу правильно выполнить умножение матрицы на моем тензорном матричном вводе (для неизвестного размера партии)?
Просто добавить одну вещь. Вам нужно будет добавить инициализатор для функции сканирования, размер вывода ваших двух матричных умножений, U * x –
В настоящее время [tf.matmul] (http://stackoverflow.com/a/43829731/1090562) является правильным способ выполнения пакетного умножения. –