Exemplo n.º 1
0
    def op(self, concat, c, forget_bias):
        batches = concat.shape[0]
        vec_len = concat.shape[1]/4

        assert c.shape[0] == concat.shape[0]
        assert c.shape[1] == vec_len
        assert c.dtype == concat.dtype

        pos = position_in([batches, vec_len])
        cur_batch = pos[0]
        cur_elem = pos[1]

        i = concat[cur_batch, cur_elem]
        j = concat[cur_batch, cur_elem + vec_len]
        f = concat[cur_batch, cur_elem + 2*vec_len]
        o = concat[cur_batch, cur_elem + 3*vec_len]
        c_cur = c[cur_batch, cur_elem]

        new_c = output_like(c)
        new_h = output_like(c)

        new_c_cur = c_cur*sig(f + forget_bias) + sig(i) * tanh(j)

        new_c[pos] = new_c_cur
        new_h[pos] = tanh(new_c_cur) * sig(o)

        return new_c, new_h
Exemplo n.º 2
0
 def sum_sq(input0, input1, input2):
     pos = position_in(input0.shape)
     out0 = output_like(input0)
     a = input0[pos]
     b = input1[pos]
     c = input2[pos]
     d = a * a + b * b + c * c
     out0[pos] = d
     return out0
 def sum_sq(input0, input1, input2):
     pos = position_in(input0.shape)
     out0 = output_like(input0)
     a = input0[pos]
     b = input1[pos]
     c = input2[pos]
     d = a*a + b*b + c*c
     out0[pos] = d
     return out0
Exemplo n.º 4
0
        def multi_op(input0, input1, input2):
            pos = position_in(input0.shape)
            output0 = output_like(input0)
            output1 = output_like(input0)
            output2 = output_like(input0)

            a = input0[pos]
            b = input1[pos]
            c = input2[pos]
            d = a + b
            output0[pos] = d
            output1[pos] = d * c
            output2[pos] = d + c

            return output0, output1, output2
            def op(self, input0, input1, input2):
                pos = position_in(input0.shape)
                output0 = output_like(input0)
                output1 = output_like(input0)
                output2 = output_like(input0)

                a = input0[pos]
                b = input1[pos]
                c = input2[pos]
                d = a + b
                output0[pos] = d
                output1[pos] = d*c
                output2[pos] = d+c

                return output0, output1, output2
Exemplo n.º 6
0
    def op(self, concat, c, forget_bias, d_concat, d_c):
        batches = concat.shape[0]
        vec_len = concat.shape[1]/4

        assert c.shape[0] == concat.shape[0]
        assert c.shape[1] == vec_len
        assert c.dtype == concat.dtype

        assert d_concat.tensor_type == concat.tensor_type
        assert d_c.tensor_type == c.tensor_type

        pos = position_in([batches, vec_len])
        cur_batch = pos[0]
        cur_elem = pos[1]

        i = concat[cur_batch, cur_elem]
        j = concat[cur_batch, cur_elem + vec_len]
        f = concat[cur_batch, cur_elem + 2*vec_len]
        o = concat[cur_batch, cur_elem + 3*vec_len]
        c_cur = c[cur_batch, cur_elem]
        new_c_cur = c_cur*sig(f + forget_bias) + sig(i) * tanh(j)

        d_new_c = output_like(c)
        d_new_h = output_like(c)

        d_i = d_concat[cur_batch, cur_elem]
        d_j = d_concat[cur_batch, cur_elem + vec_len]
        d_f = d_concat[cur_batch, cur_elem + 2*vec_len]
        d_o = d_concat[cur_batch, cur_elem + 3*vec_len]
        d_c_cur = d_c[cur_batch, cur_elem]

        d_new_c_cur = c_cur*sig_grad(f+forget_bias)*d_f + \
            sig(f+forget_bias)*d_c_cur + \
            tanh(j)*sig_grad(i)*d_i + \
            sig(i)*tanh_grad(j)*d_j

        d_new_h_cur = sig(o)*tanh_grad(new_c_cur)*d_new_c_cur + \
            tanh(new_c_cur)*sig_grad(o)*d_o

        d_new_c[pos] = d_new_c_cur
        d_new_h[pos] = d_new_h_cur

        return d_new_c, d_new_h
Exemplo n.º 7
0
 def add(x, y):
     pos = position_in(x.shape)
     out = output_like(x)
     out[pos] = x[pos] + y[pos]
     return out
 def op(self, x, y):
     pos = position_in(x.shape)
     out = output_like(x)
     out[pos] = x[pos] + y[pos]
     return out
Exemplo n.º 9
0
 def add_inputs(op_input0, op_input1):
     output = output_like(op_input0)
     pos = position_in(op_input0.shape)
     output[pos] = op_input0[pos] + op_input1[pos]
     return output