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); }
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); }
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]);
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; }
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); }