/** 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); }
/** 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); }
/** 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); }