Пример #1
0
        public override void Update(NeuralLink Link)
        {

            if (Link.BACKWARD_LAYER.IsOrigin)
            {
                Link.WEIGHT[0, 0] = 0.25;
                Link.WEIGHT[1, 0] = -0.25;
                Link.WEIGHT[2, 0] = 0.25;

                Link.WEIGHT[0, 1] = -0.25;
                Link.WEIGHT[1, 1] = 0.25;
                Link.WEIGHT[2, 1] = -0.25;
            }
            else
            {
                Link.WEIGHT[0, 0] = 0.25;
                Link.WEIGHT[1, 0] = -0.25;
                Link.WEIGHT[2, 0] = 0.25;
            }

        }
Пример #2
0
        public override void Update(NeuralLink Link)
        {

            for (int i = 0; i < Link.ROW_COUNT; i++)
            {
                for (int j = 0; j < Link.COL_COUNT; j++)
                {

                    // Variables //
                    double s = Math.Sign(Link.GRADIENT[i, j] * Link.LAG_GRADIENT[i, j]);
                    double dxs = Math.Sign(Link.GRADIENT[i, j]);
                    double dx2s = Math.Sign((Link.GRADIENT[i, j] - Link.LAG_GRADIENT[i, j]) * (Link.WEIGHT[i, j] - Link.LAG_WEIGHT[i, j]));
                    double d = Link.DELTA[i, j];
                    double w = Link.WEIGHT[i, j];

                    if (s > 0)
                    {
                        d = Math.Min(CEILING, this._up * d);
                    }
                    else if (s < 0)
                    {
                        d = Math.Max(FLOOR, this._down * d);
                    }

                    Link.WEIGHT[i, j] += d * Math.Sign(Link.GRADIENT[i, j]) * 0.5 + 0.50 * Link.GRADIENT[i, j] * 0.30;

                    Link.LAG_DELTA[i, j] = Link.DELTA[i, j];
                    Link.LAG_WEIGHT[i, j] = w;
                    Link.LAG_GRADIENT[i, j] = Link.GRADIENT[i, j];

                    Link.DELTA[i, j] = d;

                }
            }

        }
Пример #3
0
        public override void Update(NeuralLink Link)
        {

            for (int i = 0; i < Link.ROW_COUNT; i++)
            {
                for (int j = 0; j < Link.COL_COUNT; j++)
                {

                    // Variables //
                    double s = Math.Sign(Link.GRADIENT[i, j] * Link.LAG_GRADIENT[i, j]);
                    double d = Link.DELTA[i,j];
                    double w = Link.WEIGHT[i, j];
                    //Console.WriteLine("i x j x d x w : {0} x {1} x {2} x {3}", i, j, d, w);

                    if (s > 0)
                    {
                        d = Math.Min(CEILING, this._up * d);
                        Link.WEIGHT[i, j] += d * Math.Sign(Link.GRADIENT[i, j]);
                    }
                    else if (s < 0)
                    {
                        d = Math.Max(FLOOR, this._down * d);
                        Link.GRADIENT[i, j] = 0D;
                    }
                    else
                    {
                        Link.WEIGHT[i, j] += d * Math.Sign(Link.GRADIENT[i, j]);
                    }

                    Link.LAG_DELTA[i, j] = Link.DELTA[i, j];
                    Link.LAG_WEIGHT[i, j] = w;
                    Link.LAG_GRADIENT[i, j] = Link.GRADIENT[i, j];

                    Link.DELTA[i, j] = d;

                }
            }

        }
Пример #4
0
        public override void Update(NeuralLink Link)
        {

            for (int i = 0; i < Link.ROW_COUNT; i++)
            {
                for (int j = 0; j < Link.COL_COUNT; j++)
                {
                    double dx2 = (Link.GRADIENT[i, j] - Link.LAG_GRADIENT[i, j]) / (Link.WEIGHT[i, j] - Link.LAG_WEIGHT[i, j]);
                    double w = Link.WEIGHT[i, j];
                    Link.WEIGHT[i, j] += Math.Sign(Link.GRADIENT[i, j]) * this._lr + Math.Sign(dx2) * this._m;
                    Link.LAG_WEIGHT[i, j] = w;
                    Link.LAG_GRADIENT[i, j] = Link.GRADIENT[i, j];
                }
            }

        }
Пример #5
0
 public override void Update(NeuralLink Link)
 {
     for (int i = 0; i < Link.ROW_COUNT; i++)
     {
         for (int j = 0; j < Link.COL_COUNT; j++)
         {
             Link.WEIGHT[i, j] = this._generator.NextDouble() * 2D - 1D;
             Link.DELTA[i, j] = 0.1;
             Link.LAG_DELTA[i, j] = 0.1;
         }
     }
 }
Пример #6
0
 public abstract void Update(NeuralLink Link);