public override double[] Perzertron_forward(double[] x)
        {
            double[] y = new double[weight_small.GetLength(1)];

            for (int i = 0; i < weight_small.GetLength(1); i++)
            {
                for (int j = 0; j < weight_small.GetLength(0); j++)
                {
                    y[i] = y[i] + (x[i] * weight_small[j, i]) + (state_RNN[i] * state_Matrix_RNN[j, i]);
                }
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = y[i] + bias0[i];
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = Activation_Func.Tanh(y[i]);
            }

            Set_state_RNN(y);

            return(y);
        }
        public double[] Perzertron_Forward_First_Step(double[] x)
        {
            double[] y = new double[weight_small.GetLength(1)];

            for (int i = 0; i < weight_small.GetLength(1); i++)
            {
                for (int j = 0; j < weight_small.GetLength(0); j++)
                {
                    y[i] = y[i] + (x[i] * weight_small[j, i]);
                }
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = y[i] + bias0[i];
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = Activation_Func.Tanh(y[i]);
            }

            Set_state_RNN(y);
            return(y);
        }
        private double[] Candidate_Cell_Gate_3_Forward(double[] x, double[] reset_Gate)
        {
            double[] y = new double[weight_3_Small_Candidate_Cell.GetLength(1)];

            double[] z = Matrix_work.Vector_Multiplication_Adamar_Shur(reset_Gate, state_GRU);

            for (int i = 0; i < weight_3_Small_Candidate_Cell.GetLength(1); i++)
            {
                for (int j = 0; j < weight_3_Small_Candidate_Cell.GetLength(0); j++)
                {
                    y[i] = y[i] + (x[i] * weight_3_Small_Candidate_Cell[j, i]) + (z[i] * matrix_GRU_3_Candidate_Cell[j, i]);
                }
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = y[i] + bias_3_Candidate_Cell[i];
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = Activation_Func.Tanh(y[i]);
            }
            return(y);
        }
        private double[] Activation_Cell_Tanh(double[] x)
        {
            double[] y = new double[x.Length];

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = Activation_Func.Tanh(x[i]);
            }

            return(y);
        }
        public override double[] Perzertron_forward(double[] x)
        {
            double[] y = new double[x.Length];
            double[] z;

            for (int i = 0; i < x.Length; i++)
            {
                for (int j = 0; j < x.Length; j++)
                {
                    y[i] = y[i] + (x[i] * weight_1[j, i]);
                }
            }
            for (int i = 0; i < x.Length; i++)
            {
                y[i] = y[i] + bias0[i];
            }

            z = Activation_Func.Softmax(y);

            return(z);
        }
        private double[] Forget_Gate_3_Forward(double[] x)
        {
            double[] y = new double[weight_3_Small_Forget.GetLength(1)];

            for (int i = 0; i < weight_3_Small_Forget.GetLength(1); i++)
            {
                for (int j = 0; j < weight_3_Small_Forget.GetLength(0); j++)
                {
                    y[i] = y[i] + (x[i] * weight_3_Small_Forget[j, i]) + (state_LSTM[i] * matrix_LSTM_3_Forget[j, i]);
                }
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = y[i] + bias_3_Forget[i];
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = Activation_Func.Sigmoid(y[i]);
            }
            return(y);
        }
        private double[] Candidate_Cell_State_1_Forward(double[] x)
        {
            double[] y = new double[weight_1_Small_Candidate_Cell.GetLength(1)];

            for (int i = 0; i < weight_1_Small_Candidate_Cell.GetLength(1); i++)
            {
                for (int j = 0; j < weight_1_Small_Candidate_Cell.GetLength(0); j++)
                {
                    y[i] = y[i] + (x[i] * weight_1_Small_Candidate_Cell[j, i]) + (state_LSTM[i] * matrix_LSTM_1_Candidate_Cell[j, i]);
                }
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = y[i] + bias_1_Candidate_Cell[i];
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = Activation_Func.Tanh(y[i]);
            }
            return(y);
        }
        private double[] Reset_Gate_2_Forward(double[] x)
        {
            double[] y = new double[weight_2_Small_Reset_Gate.GetLength(1)];

            for (int i = 0; i < weight_2_Small_Reset_Gate.GetLength(1); i++)
            {
                for (int j = 0; j < weight_2_Small_Reset_Gate.GetLength(0); j++)
                {
                    y[i] = y[i] + (x[i] * weight_2_Small_Reset_Gate[j, i]) + (state_GRU[i] * matrix_GRU_2_Reset_Gate[j, i]);
                }
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = y[i] + bias_2_Reset_Gate[i];
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = Activation_Func.Sigmoid(y[i]);
            }
            return(y);
        }
示例#9
0
        /// <summary>
        /// Считать перцептрон вперед
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        public virtual double[] Perzertron_forward(double[] x)
        {
            double[] y = new double[x.Length];

            for (int i = 0; i < x.Length; i++)
            {
                for (int j = 0; j < x.Length; j++)
                {
                    y[i] = y[i] + (x[i] * weight_1[j, i]);
                }
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = y[i] + bias0[i];
            }

            for (int i = 0; i < x.Length; i++)
            {
                y[i] = Activation_Func.Sigmoid(y[i]);
            }
            return(y);
        }