RNN Scratch, длительное время обучения и мульти-пакет - PullRequest
0 голосов
/ 25 мая 2020

Подводя итог, я пишу свой собственный RNN с нуля и, похоже, он без проблем работает. Однако на обучение данных уходит много времени, поэтому я хочу определить размер пакета. В настоящее время система работает с одним предложением за раз. Однако я не смог найти источник, как это сделать. Как я могу преобразовать его в многопакетную? Стоит ли использовать многопоточность?

Шаг:

...
for i in range(len(y_train)):
    self.step(X_train[i], y_train[i], learning_rate)

Функция шага:

def step(self, x, y, learning_rate):
    dU, dV, dW = self.bptt(x, y)
    ...

Функция bptt:

def bptt(self, x, y):
    T = len(y)
    o, s = self.forward_propagation(x)
    dU = np.zeros(self.U.shape)
    dV = np.zeros(self.V.shape)
    dW = np.zeros(self.W.shape)
    delta_o = o
    delta_o[np.arange(len(y)), y] -= 1
    for t in np.arange(T):
        dV += np.outer(delta_o[t], s[t].T)
        delta_t = self.V.T.dot(delta_o[t]) * (1 - (s[t]**2))
        for bptt_step in np.arange(max(0, t-self.bptt_truncate), t+1)[::-1]:
            dW += np.outer(delta_t, s[bptt_step - 1])
            dU[:, x[bptt_step]] += delta_t
    return dU,dV,dW
...