Я пытаюсь умножить набор матриц на набор векторов в тензорном потоке. У меня есть два тензора с формами [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