Подводя итог, я пишу свой собственный 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