package org.ea.javacnn.trainers;

import org.ea.javacnn.JavaCNN;
import org.ea.javacnn.data.BackPropResult;
import org.ea.javacnn.data.DataBlock;
import org.ea.javacnn.data.TrainResult;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * The adaptive gradient trainer will over time sum up the square of
 * the gradient and use it to change the weights.
 *
 * @author Daniel Persson (mailto.woden@gmail.com)
 */
public class AdaGradTrainer extends Trainer {

    public AdaGradTrainer(JavaCNN net, int batch_size, float l2_decay) {
        super(net, batch_size, l2_decay);
    }

    public void update(int i, int j, double gij, double[] p) {
        double[] gsumi = this.gsum.get(i);
        // adagrad update
        gsumi[j] = gsumi[j] + gij * gij;
        double dx = - this.learning_rate / Math.sqrt(gsumi[j] + this.eps) * gij;
        p[j] += dx;
    }
}
 

Ads help maintain this website.