Я пытаюсь научиться эффективно реализовывать различную нейронную сеть в питоне и в настоящее время пытаюсь реализовать эту модельУпрощения петельных Numpy операции
.
Однако у меня возникли проблемы с использованием операций numpy для реализации суммирования.
Я слежу за this existing implementation и пытаюсь упростить его, но мне не совсем ясно, что все выполняемые операции массива достигают. Моя интерпретация заключается в том, что C перемножаются через каждый из столбцов R и суммируются. Однако моя реализация einsum np.einsum('ijk,km->ij', C, R)
, похоже, не дает требуемого результата.
Буду признателен за упрощение этой реализации. Мои текущие попытки заключались в использовании np.einsum
, но это пока не дошло до меня.
Код для упрощения (объяснена в образе/первой ссылке):
batchsize = X.shape[0]
R = self.R
C = self.C
bw = self.bw
# Obtain word features
tmp = R.as_numpy_array()[:,X.flatten()].flatten(order='F')
tmp = tmp.reshape((batchsize, self.K * self.context))
words = np.zeros((batchsize, self.K, self.context))
for i in range(batchsize):
words[i,:,:] = tmp[i,:].reshape((self.K, self.context), order='F')
words = gpu.garray(words)
# Compute the hidden layer (predicted next word representation)
acts = gpu.zeros((batchsize, self.K))
for i in range(self.context):
acts = acts + gpu.dot(words[:,:,i], C[i,:,:])
Это лучше подходит для [код-обзор], если у вас есть конкретный вопрос/ошибка. – Julien
@JulienBernu Извините, я новичок. Я редактировал. –
Вам также нужно объяснить, что такое «требуемый результат». Люди вряд ли будут копать всю бумагу, чтобы понять, чего вы хотите. Пожалуйста, предоставьте [mcve]. – Julien