示例#1
0
        public CNNLayer(int nodeNum, ACTIVE_FUNCTION af = ACTIVE_FUNCTION.RELU)
        {
            mAFuction = af;
            mNodeNum  = nodeNum;
            Random r = new Random();

            mB = Matrix <double> .Build.Dense(nodeNum, 1, (i, j) => r.NextDouble());

            mZ = Matrix <double> .Build.Dense(nodeNum, 1, (i, j) => r.NextDouble());

            mA = Matrix <double> .Build.Dense(nodeNum, 1, (i, j) => r.NextDouble());
        }
示例#2
0
        public static Matrix <double> getActiveValMatrix(Matrix <double> m, ACTIVE_FUNCTION af)
        {
            Matrix <double> re = Matrix <double> .Build.DenseIdentity(m.RowCount, m.ColumnCount);

            try
            {
                re = Matrix <double> .Build.Dense(m.RowCount, m.ColumnCount, (i, j) => getActiveVal(m.Row(i)[j], af));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return(re);
        }
示例#3
0
        public static double getActiveVal(double z, ACTIVE_FUNCTION af)
        {
            double re = 0.1;

            try
            {
                if (af == ACTIVE_FUNCTION.RELU)
                {
                    /*
                     * a = g(z) = max(0,z)
                     * dz = 0/1
                     */
                    if (z > 0)
                    {
                        re = z;
                    }
                    else
                    {
                        re = 0;
                    }
                }
                if (af == ACTIVE_FUNCTION.LOGI)
                {
                    /*
                     * a = g(z) = 1/(1+e(-z))
                     * dz = a(1-a)
                     */
                    re = 1 / (1 + Math.Exp(-z));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return(re);
        }