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; } }
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; } } }
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; } } }
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]; } } }
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; } } }
public abstract void Update(NeuralLink Link);