总而言之,我从头开始编写自己的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