Esempio n. 1
0
 public void CalculateParams(IMultipleLayer target)
 {
     AdaDeltaW   = NumMath.Array(target.Size, target.ConectionsSize);
     AdaDeltaW_v = NumMath.Array(target.Size, target.ConectionsSize);
     AdaDeltaB   = NumMath.Array(target.Size);
     AdaDeltaB_v = NumMath.Array(target.Size);
 }
 public void CalculateParams(IMultipleLayer target)
 {
     mW = NumMath.Array(target.Size, target.ConectionsSize);
     vW = NumMath.Array(target.Size, target.ConectionsSize);
     mB = NumMath.Array(target.Size);
     vB = NumMath.Array(target.Size);
 }
Esempio n. 3
0
        public void ResetAdagradParams()
        {
            mWf = NumMath.Array(hidden_size, input_size + hidden_size);
            mWi = NumMath.Array(hidden_size, input_size + hidden_size);
            mWc = NumMath.Array(hidden_size, input_size + hidden_size);
            mWo = NumMath.Array(hidden_size, input_size + hidden_size);

            mBf = NumMath.Array(hidden_size);
            mBi = NumMath.Array(hidden_size);
            mBc = NumMath.Array(hidden_size);
            mBo = NumMath.Array(hidden_size);
        }
Esempio n. 4
0
                FloatArray hs, FloatArray cs) BPTT(Array <FloatArray> inputs, FloatArray error, FloatArray hprev, FloatArray cprev)
        {
            // store states
            var z_s   = new Array <FloatArray>(inputs.Length);
            var f_s   = new Array <FloatArray>(inputs.Length);
            var i_s   = new Array <FloatArray>(inputs.Length);
            var c_s_s = new Array <FloatArray>(inputs.Length);
            var c_s   = new Array <FloatArray>(inputs.Length);
            var o_s   = new Array <FloatArray>(inputs.Length);
            var h_s   = new Array <FloatArray>(inputs.Length);

            // init timing
            h_s[-1] = hprev.Clone();
            c_s[-1] = cprev.Clone();

            // forward
            for (var t = 0; t < inputs.Length; t++)
            {
                (z_s[t], f_s[t], i_s[t], c_s_s[t], c_s[t], o_s[t], h_s[t]) =
                    FeedForward(inputs[t], h_s[t - 1], c_s[t - 1]);
            }

            // gradients
            var dWf = NumMath.Array(Wf.W, Wf.H);
            var dWi = NumMath.Array(Wi.W, Wi.H);
            var dWc = NumMath.Array(Wc.W, Wc.H);
            var dWo = NumMath.Array(Wo.W, Wo.H);
            var dBf = NumMath.Array(Bf.Length);
            var dBi = NumMath.Array(Bi.Length);
            var dBc = NumMath.Array(Bc.Length);
            var dBo = NumMath.Array(Bo.Length);

            var dhnext = error;
            var dcnext = NumMath.Array(hidden_size);

            // backward
            for (var t = inputs.Length - 1; t >= 0; t--)
            {
                (dhnext, dcnext) = Backward(dhnext, dcnext, c_s[t - 1],
                                            z_s[t], f_s[t], i_s[t], c_s_s[t], c_s[t], o_s[t], h_s[t],
                                            ref dWf, ref dWi, ref dWc, ref dWo, ref dBf, ref dBi, ref dBc, ref dBo);
            }

            dWf = NumMath.Normalize(-5, 5, dWf / inputs.Length);
            dWi = NumMath.Normalize(-5, 5, dWi / inputs.Length);
            dWc = NumMath.Normalize(-5, 5, dWc / inputs.Length);
            dWo = NumMath.Normalize(-5, 5, dWo / inputs.Length);
            dBf = NumMath.Normalize(-5, 5, dBf / inputs.Length);
            dBi = NumMath.Normalize(-5, 5, dBi / inputs.Length);
            dBc = NumMath.Normalize(-5, 5, dBc / inputs.Length);
            dBo = NumMath.Normalize(-5, 5, dBo / inputs.Length);

            return(dWf, dWi, dWc, dWo, dBf, dBi, dBc, dBo, h_s[inputs.Length - 1], c_s[inputs.Length - 1]);
Esempio n. 5
0
        public RecursiveNeuralNetworkWithContext(int inputSize, float learningRate, float std)
        {
            int hSize = 20;

            wpl = NumMath.Random(inputSize, inputSize, std);
            wpr = NumMath.Random(inputSize, inputSize, std);
            wC  = NumMath.Random(inputSize, inputSize, std);
            wHP = NumMath.Random(hSize, inputSize, std);
            wHC = NumMath.Random(hSize, inputSize, std);
            wS  = NumMath.Random(1, hSize, 1e-10f);

            bC = NumMath.Repeat(inputSize, 1f / (float)inputSize);
            bH = NumMath.Repeat(hSize, 1f / (float)hSize);
            bP = NumMath.Repeat(inputSize, 1f / (float)inputSize);

            mwpl = NumMath.Array(inputSize, inputSize);
            mwpr = NumMath.Array(inputSize, inputSize);
            mwC  = NumMath.Array(inputSize, inputSize);
            mwHP = NumMath.Array(hSize, inputSize);
            mwHC = NumMath.Array(hSize, inputSize);
            mwS  = NumMath.Array(1, hSize);

            mbC = NumMath.Array(inputSize);
            mbH = NumMath.Array(hSize);
            mbP = NumMath.Array(inputSize);

            Adam_m_wpl = NumMath.Array(inputSize, inputSize);
            Adam_m_wpr = NumMath.Array(inputSize, inputSize);
            Adam_m_wC  = NumMath.Array(inputSize, inputSize);
            Adam_m_wHP = NumMath.Array(hSize, inputSize);
            Adam_m_wHC = NumMath.Array(hSize, inputSize);
            Adam_m_ws  = NumMath.Array(1, hSize);

            Adam_m_bC = NumMath.Array(inputSize);
            Adam_m_bH = NumMath.Array(hSize);
            Adam_m_bP = NumMath.Array(inputSize);

            Adam_v_wpl = NumMath.Array(inputSize, inputSize);
            Adam_v_wpr = NumMath.Array(inputSize, inputSize);
            Adam_v_wC  = NumMath.Array(inputSize, inputSize);
            Adam_v_wHP = NumMath.Array(hSize, inputSize);
            Adam_v_wHC = NumMath.Array(hSize, inputSize);
            Adam_v_ws  = NumMath.Array(1, hSize);

            Adam_v_bC = NumMath.Array(inputSize);
            Adam_v_bH = NumMath.Array(hSize);
            Adam_v_bP = NumMath.Array(inputSize);

            _learningRate = learningRate;
        }
Esempio n. 6
0
                FloatArray hs, FloatArray cs) BPTT(int[] inputs, int[] targets, FloatArray hprev, FloatArray cprev)
        {
            // store states
            var x_s   = new Array <FloatArray>(inputs.Length);
            var z_s   = new Array <FloatArray>(inputs.Length);
            var f_s   = new Array <FloatArray>(inputs.Length);
            var i_s   = new Array <FloatArray>(inputs.Length);
            var c_s_s = new Array <FloatArray>(inputs.Length);
            var c_s   = new Array <FloatArray>(inputs.Length);
            var o_s   = new Array <FloatArray>(inputs.Length);
            var h_s   = new Array <FloatArray>(inputs.Length);
            var v_s   = new Array <FloatArray>(inputs.Length);
            var y_s   = new Array <FloatArray>(inputs.Length);
            var t_g   = new Array <FloatArray>(inputs.Length);

            // loss
            var loss = 0d;

            // init timing
            h_s[-1] = hprev.Clone();
            c_s[-1] = cprev.Clone();

            // forward
            for (var t = 0; t < inputs.Length; t++)
            {
                x_s[t]            = new FloatArray(input_size);
                x_s[t][inputs[t]] = 1;

                t_g[t]             = new FloatArray(output_size);
                t_g[t][targets[t]] = 1;

                (z_s[t], f_s[t], i_s[t], c_s_s[t], c_s[t], o_s[t], h_s[t], v_s[t], y_s[t]) =
                    FeedForward(x_s[t], h_s[t - 1], c_s[t - 1]);

                loss += -(t_g[t] * y_s[t].Log()).Sum();
            }

            // gradients
            var dWf = NumMath.Array(Wf.W, Wf.H);
            var dWi = NumMath.Array(Wi.W, Wi.H);
            var dWc = NumMath.Array(Wc.W, Wc.H);
            var dWo = NumMath.Array(Wo.W, Wo.H);
            var dWv = NumMath.Array(Wv.W, Wv.H);
            var dBf = NumMath.Array(Bf.Length);
            var dBi = NumMath.Array(Bi.Length);
            var dBc = NumMath.Array(Bc.Length);
            var dBo = NumMath.Array(Bo.Length);
            var dBv = NumMath.Array(Bv.Length);

            var dhnext = NumMath.Array(hidden_size);
            var dcnext = NumMath.Array(hidden_size);

            // backward
            for (var t = inputs.Length - 1; t >= 0; t--)
            {
                (dhnext, dcnext) = Backward(targets[t], dhnext, dcnext, c_s[t - 1],
                                            z_s[t], f_s[t], i_s[t], c_s_s[t], c_s[t], o_s[t], h_s[t], v_s[t], y_s[t],
                                            ref dWf, ref dWi, ref dWc, ref dWo, ref dWv, ref dBf, ref dBi, ref dBc, ref dBo, ref dBv);
            }

            dWf = NumMath.Normalize(-5, 5, dWf / inputs.Length);
            dWi = NumMath.Normalize(-5, 5, dWi / inputs.Length);
            dWc = NumMath.Normalize(-5, 5, dWc / inputs.Length);
            dWo = NumMath.Normalize(-5, 5, dWo / inputs.Length);
            dWv = NumMath.Normalize(-5, 5, dWv / inputs.Length);
            dBf = NumMath.Normalize(-5, 5, dBf / inputs.Length);
            dBi = NumMath.Normalize(-5, 5, dBi / inputs.Length);
            dBc = NumMath.Normalize(-5, 5, dBc / inputs.Length);
            dBo = NumMath.Normalize(-5, 5, dBo / inputs.Length);
            dBv = NumMath.Normalize(-5, 5, dBv / inputs.Length);

            return(loss, dWf, dWi, dWc, dWo, dWv, dBf, dBi, dBc, dBo, dBv, h_s[inputs.Length - 1], c_s[inputs.Length - 1]);
 public void CalculateParams(ILayer target)
 {
     gW = NumMath.Array(target.Size, target.ConectionsSize);
     bW = NumMath.Array(target.Size);
 }