public boolean trainIncremental(InstanceList trainingSet) { this.train(trainingSet, 1); return false; }
/** * Adjust the parameters by default learning rate according to the gradient * of this single Instance, and return the true label sequence likelihood. */ public double trainIncrementalLikelihood(Instance trainingInstance) { return trainIncrementalLikelihood(trainingInstance, learningRate); }
public void testTrainStochasticGradient() { Pipe p = makeSpacePredictionPipe(); Pipe p2 = new TestCRF2String(); InstanceList instances = new InstanceList(p); instances.addThruPipe(new ArrayIterator(data)); InstanceList[] lists = instances.split(new double[] { .5, .5 }); CRF crf = new CRF(p, p2); crf.addFullyConnectedStatesForLabels(); crf.setWeightsDimensionAsIn(lists[0], false); CRFTrainerByStochasticGradient crft = new CRFTrainerByStochasticGradient( crf, 0.0001); System.out.println("Training Accuracy before training = " + crf.averageTokenAccuracy(lists[0])); System.out.println("Testing Accuracy before training = " + crf.averageTokenAccuracy(lists[1])); System.out.println("Training..."); // either fixed learning rate or selected on a sample crft.setLearningRateByLikelihood(lists[0]); // crft.setLearningRate(0.01); crft.train(lists[0], 100); crf.print(); System.out.println("Training Accuracy after training = " + crf.averageTokenAccuracy(lists[0])); System.out.println("Testing Accuracy after training = " + crf.averageTokenAccuracy(lists[1])); }
/** Automatically sets the learning rate to one that would be good */ public void setLearningRateByLikelihood(InstanceList trainingSample) { int numIterations = 5; // was 10 -akm 1/25/08 double bestLearningRate = Double.NEGATIVE_INFINITY; double bestLikelihoodChange = Double.NEGATIVE_INFINITY; double currLearningRate = 5e-11; while (currLearningRate < 1) { currLearningRate *= 2; crf.parameters.zero(); double beforeLikelihood = computeLikelihood(trainingSample); double likelihoodChange = trainSample(trainingSample, numIterations, currLearningRate) - beforeLikelihood; System.out.println("likelihood change = " + likelihoodChange + " for learningrate=" + currLearningRate); if (likelihoodChange > bestLikelihoodChange) { bestLikelihoodChange = likelihoodChange; bestLearningRate = currLearningRate; } } // reset the parameters crf.parameters.zero(); // conservative estimate for learning rate bestLearningRate /= 2; System.out.println("Setting learning rate to " + bestLearningRate); setLearningRate(bestLearningRate); }
for (int i = 0; i < trainingSet.size(); i++) { learningRate = 1.0 / (lambda * t); loglik += trainIncrementalLikelihood(trainingSet .get(trainingIndices.get(i))); t += 1.0; runEvaluators();
public CRFTrainerByStochasticGradient(CRF crf, InstanceList trainingSample) { this.crf = crf; this.expectations = new CRF.Factors(crf); this.constraints = new CRF.Factors(crf); this.setLearningRateByLikelihood(trainingSample); }
public void testTrainStochasticGradient() { Pipe p = makeSpacePredictionPipe(); Pipe p2 = new TestCRF2String(); InstanceList instances = new InstanceList(p); instances.addThruPipe(new ArrayIterator(data)); InstanceList[] lists = instances.split(new double[] { .5, .5 }); CRF crf = new CRF(p, p2); crf.addFullyConnectedStatesForLabels(); crf.setWeightsDimensionAsIn(lists[0], false); CRFTrainerByStochasticGradient crft = new CRFTrainerByStochasticGradient( crf, 0.0001); System.out.println("Training Accuracy before training = " + crf.averageTokenAccuracy(lists[0])); System.out.println("Testing Accuracy before training = " + crf.averageTokenAccuracy(lists[1])); System.out.println("Training..."); // either fixed learning rate or selected on a sample crft.setLearningRateByLikelihood(lists[0]); // crft.setLearningRate(0.01); crft.train(lists[0], 100); crf.print(); System.out.println("Training Accuracy after training = " + crf.averageTokenAccuracy(lists[0])); System.out.println("Testing Accuracy after training = " + crf.averageTokenAccuracy(lists[1])); }
/** Automatically sets the learning rate to one that would be good */ public void setLearningRateByLikelihood(InstanceList trainingSample) { int numIterations = 5; // was 10 -akm 1/25/08 double bestLearningRate = Double.NEGATIVE_INFINITY; double bestLikelihoodChange = Double.NEGATIVE_INFINITY; double currLearningRate = 5e-11; while (currLearningRate < 1) { currLearningRate *= 2; crf.parameters.zero(); double beforeLikelihood = computeLikelihood(trainingSample); double likelihoodChange = trainSample(trainingSample, numIterations, currLearningRate) - beforeLikelihood; System.out.println("likelihood change = " + likelihoodChange + " for learningrate=" + currLearningRate); if (likelihoodChange > bestLikelihoodChange) { bestLikelihoodChange = likelihoodChange; bestLearningRate = currLearningRate; } } // reset the parameters crf.parameters.zero(); // conservative estimate for learning rate bestLearningRate /= 2; System.out.println("Setting learning rate to " + bestLearningRate); setLearningRate(bestLearningRate); }
for (int i = 0; i < trainingSet.size(); i++) { learningRate = 1.0 / (lambda * t); loglik += trainIncrementalLikelihood(trainingSet .get(trainingIndices.get(i))); t += 1.0; runEvaluators();
public CRFTrainerByStochasticGradient(CRF crf, InstanceList trainingSample) { this.crf = crf; this.expectations = new CRF.Factors(crf); this.constraints = new CRF.Factors(crf); this.setLearningRateByLikelihood(trainingSample); }
crf.addFullyConnectedStatesForLabels(); crf.setWeightsDimensionAsIn(lists[0], false); CRFTrainerByStochasticGradient crft = new CRFTrainerByStochasticGradient( crf, 0.0001); System.out.println("Training Accuracy before training = " System.out.println("Training..."); crft.setLearningRateByLikelihood(lists[0]); crft.train(lists[0], 100); crf.print(); System.out.println("Training Accuracy after training = "
/** Automatically sets the learning rate to one that would be good */ public void setLearningRateByLikelihood(InstanceList trainingSample) { int numIterations = 5; // was 10 -akm 1/25/08 double bestLearningRate = Double.NEGATIVE_INFINITY; double bestLikelihoodChange = Double.NEGATIVE_INFINITY; double currLearningRate = 5e-11; while (currLearningRate < 1) { currLearningRate *= 2; crf.parameters.zero(); double beforeLikelihood = computeLikelihood(trainingSample); double likelihoodChange = trainSample(trainingSample, numIterations, currLearningRate) - beforeLikelihood; System.out.println("likelihood change = " + likelihoodChange + " for learningrate=" + currLearningRate); if (likelihoodChange > bestLikelihoodChange) { bestLikelihoodChange = likelihoodChange; bestLearningRate = currLearningRate; } } // reset the parameters crf.parameters.zero(); // conservative estimate for learning rate bestLearningRate /= 2; System.out.println("Setting learning rate to " + bestLearningRate); setLearningRate(bestLearningRate); }
for (int i = 0; i < trainingSet.size(); i++) { learningRate = 1.0 / (lambda * t); loglik += trainIncrementalLikelihood(trainingSet .get(trainingIndices.get(i))); t += 1.0; runEvaluators();
/** * Adjust the parameters by default learning rate according to the gradient * of this single Instance, and return the true label sequence likelihood. */ public double trainIncrementalLikelihood(Instance trainingInstance) { return trainIncrementalLikelihood(trainingInstance, learningRate); }
public boolean trainIncremental(InstanceList trainingSet) { this.train(trainingSet, 1); return false; }
public CRFTrainerByStochasticGradient(CRF crf, InstanceList trainingSample) { this.crf = crf; this.expectations = new CRF.Factors(crf); this.constraints = new CRF.Factors(crf); this.setLearningRateByLikelihood(trainingSample); }
crf.addFullyConnectedStatesForLabels(); crf.setWeightsDimensionAsIn(lists[0], false); CRFTrainerByStochasticGradient crft = new CRFTrainerByStochasticGradient( crf, 0.0001); System.out.println("Training Accuracy before training = " System.out.println("Training..."); crft.setLearningRateByLikelihood(lists[0]); crft.train(lists[0], 100); crf.print(); System.out.println("Training Accuracy after training = "
/** * Adjust the parameters by default learning rate according to the gradient * of this single Instance, and return the true label sequence likelihood. */ public double trainIncrementalLikelihood(Instance trainingInstance) { return trainIncrementalLikelihood(trainingInstance, learningRate); }
public boolean train(InstanceList trainingSet, int numIterations) { return train(trainingSet, numIterations, 1); }
public boolean trainIncremental(Instance trainingInstance) { assert (expectations.structureMatches(crf.parameters)); trainIncrementalLikelihood(trainingInstance); return false; }