У меня есть некоторые данные, представленные input_x
. Это тензор неизвестного размера (должен вводиться партией), и каждый элемент имеет размер n
. input_x
подвергается tf.nn.embedding_lookup
, так что теперь embed
имеет размеры [?, n, m]
где m
- размер вложения, а ?
относится к неизвестному размеру партии.
Это описано здесь:
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
, но размер мини-пакета 64
не подходит.
Как правильно выполнить умножение матриц на входе тензорной матрицы (для неизвестного размера партии)?