Матричное векторное пакетное умножение с переменным размером пакета - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь умножить набор матриц на набор векторов в тензорном потоке. У меня есть два тензора с формами [k, n, n] и [k, n] соответственно. Если я установлю k в сети, то могу сделать попарную точку как:

final =  tf.einsum("kji,ki->kj", M, V)

Однако функция einsum () не работает с тензорами динамической формы (переменный размер пакета):

Файл "... \ Python35 \ site-packages \ tenorflow \ python \ ops \ special_math_ops.py",> строка 207, в einsum axes_to_sum)

Файл "... \ Python35 \ site-packages \ tenorflow \ python \ ops \ special_math_ops.py",> строка 252, в _einsum_reduction если len (t0_axis_labels)! = len (t0.get_shape ()):

Файл "... \ Python35 \ site-packages \ tenorflow \ python \ framework \ensor_shape.py",> строка 575, в len повысить ValueError («Невозможно взять длину фигуры с неизвестным рангом.»)

ValueError: Невозможно принять длину Shape с неизвестным рангом.

Есть идеи, как по-другому подойти к проблеме? Обратите внимание, что в нп нотации мне нужно добиться следующего: для c с формой [k, n]

c = np.zeros([k,n])
c[i,:] = np.dot(M[i,:,:],V[i,:]) 

TF версия 1.8

...