def _step(self, x_, px_, m_, h_, c_):
preact = tensor.dot(h_, self.U) + px_
i = tensor.nnet.sigmoid(_slice(preact, 0, self.hidden_dim))
f = tensor.nnet.sigmoid(_slice(preact, 1, self.hidden_dim) + self.forget_bias)
o = tensor.nnet.sigmoid(_slice(preact, 2, self.hidden_dim))
j = tensor.tanh(_slice(preact, 3, self.hidden_dim))
c = f * c_ + i * j
c = m_[:, None] * c + (1. - m_)[:, None] * c_
# Residual connection.
h = o * tensor.tanh(c) + x_
if self.recurrent_dropout_layer != None:
h = self.recurrent_dropout_layer.connect(h, self.is_train)
h = m_[:, None] * h + (1. - m_)[:, None] * h_
return h, c
评论列表
文章目录