Код: Выделить всё
out = np.einsum("bsw, swtv, st -> btv", X, W, M)
- Во-первых, в каком порядке выполняются операции?
- Это (X * W) * M или X * (W * M) ?
- Являются ли операции в einsum поэлементным умножением или матричными операциями изменения формы?
- Если бы я хотел перевести операцию einsum в чистый Умножение матриц/точечное произведение, как мне это сделать?
- Я пытался перевести их в чистые матричные операции, но конечный результат отличается от результата einsum.
Код: Выделить всё
X_inter = X.reshape(-1, 32)
W_inter = W.transpose(1,0,2,3).reshape(32, -1)
Y_inter = np.matmul(X_inter, W_inter)
XX_inter = Y_inter[:, 0].reshape(10, 20)
WW_inter = Y_inter[0, :].reshape(20, 20, 10)
W_M = WW_inter * M[:, :, None]
W_M = W_M.reshape(20, -1)
Y_out = np.matmul(XX_inter, W_M).reshape(10, 20, 6)
Будем благодарны за любую помощь.
PS: Думаю, я считаю, что порядок операций сначала X * (W * М)
Подробнее здесь: https://stackoverflow.com/questions/793 ... operations