Умножьте 3 матрицы в пользовательском слое Keras - PullRequest
0 голосов
/ 06 февраля 2019

Я хотел бы создать пользовательский слой Keras, который вычисляет произведение между 2 входными матрицами и 1 весовой матрицей (диагональная матрица): x W y

x = Input((8,200)) # (?,8,200)
y = Input((10,200)) # (?,10,200)
W # Weight matrix define with Keras (200,) 

Я хочу, чтобы выходная матрица вычисляла xWy сформа (?, 8, 10)

Я пытаюсь:

K.dot(x*W, K.transpose(Y)) # Raise Dimension error
K.dot(x*W, Permute(2,1))(Y)) # (?, 8, ?, 10)

Без первого измерения (размер партии) я вижу, как это сделать, но с этим я немногопотерял.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вы можете использовать K.batch_dot, который сделан для этой цели.

 K.batch_dot(x*W, K.permute_dimensions(y, (0,2,1)), axes=[2, 1]) # (?, 8, 10)

добьется цели.

0 голосов
/ 06 февраля 2019

Вы можете указать ось, по которой будет проходить произведение точек в слое Keras Dot.Следующий код показывает, как умножить ваши входы x и y.Если вы хотите добавить матрицу весов W, вы можете сделать это аналогичным образом (сначала умножив x и W).

x = Input((8,200)) # (?,8,200)
y = Input((10,200)) # (?,10,200)
output = keras.layers.Dot(axes=-1)([x, y]) # (?,8,10)
...