def _oper_gpu(cls, x, pz, ps, w, wr, b): if ps is None: tmp = GPUValue(shape=(x.shape[0], w.shape[1] // 4)) s_p = tmp.zeros_like_me() z_p = tmp.zeros_like_me() else: s_p = ps z_p = get_gpu(pz) u = dot(x, w) + dot(z_p, wr) if b is not None: u += b z = get_gpu(z_p).empty_like_me() state = get_gpu(s_p).empty_like_me() cu.culstm_forward_activate(get_gpu(u)) cu.culstm_forward(get_gpu(u), get_gpu(state), get_gpu(s_p), get_gpu(z)) ret = cls._create_node(z) ret.attrs._x = x ret.attrs._w = w ret.attrs._wr = wr ret.attrs._b = b ret.attrs._pz = pz ret.attrs._u = u ret.attrs._pstate = s_p ret.attrs._state = state ret._state = state if isinstance(pz, Node): pz.attrs._pfgate = u return ret
def _oper_gpu(cls, x, pz, ps, w, wr, wc, b): if ps is None: s_p = GPUValue(shape=(x.shape[0], w.shape[1] // 4)).zeros_like_me() z_p = s_p.zeros_like_me() else: s_p, z_p = map(get_gpu, (ps, pz)) s = s_p.empty_like_me() u = op.dot(x, w) + op.dot(z_p, wr) if b is not None: u += b u = get_gpu(u) z = z_p.zeros_like_me() cu.cupeepholelstm_forward(u, get_gpu(wc), s_p, s, z) ret = cls._create_node(z) ret.attrs._x = x ret.attrs._w = w ret.attrs._wr = wr ret.attrs._wc = wc ret.attrs._b = b ret.attrs._u = u ret.attrs._pz = pz ret.attrs._pstate = ps ret.attrs._state = s if isinstance(pz, Node): pz.attrs._pfgate = u return ret