double rhs1, rhs2, a, b, disc, oldAlam; double f, fold, f2; g = new double[function.getNumParameters()]; // gradient x = new double[function.getNumParameters()]; // parameters oldParameters = new double[function.getNumParameters()]; function.getParameters (x); System.arraycopy (x, 0, oldParameters, 0, x.length); function.getValueGradient (g); alam2 = tmplam = 0.0; f2 = fold = function.getValue(); if (logger.isLoggable(Level.FINE)) { logger.fine ("ENTERING BACKTRACK\n"); function.setParameters(oldParameters); f = function.getValue(); logger.warning("EXITING BACKTRACK: Jump too small (alamin="+alamin+"). Exiting and using xold. Value="+f); return 0.0; function.setParameters(x); oldAlam = alam; f = function.getValue(); tmplam = .2 * alam; if (alam < alamin) { //convergence on delta x function.setParameters(oldParameters); f = function.getValue(); logger.warning("EXITING BACKTRACK: Jump too small. Exiting and using xold. Value="+f); return 0.0;
public double getParameter(int index) { return optimizables.get(0).getParameter(index); }
public void setParameter(int index, double value) { optimizables.get(0).setParameter(index, value); }
double initialValue = optimizable.getValue(); logger.fine("Entering L-BFGS.optimize(). Initial Value="+initialValue); parameters = new double[optimizable.getNumParameters()]; oldParameters = new double[optimizable.getNumParameters()]; g = new double[optimizable.getNumParameters()]; oldg = new double[optimizable.getNumParameters()]; direction = new double[optimizable.getNumParameters()]; optimizable.getParameters (parameters); System.arraycopy (parameters, 0, oldParameters, 0, parameters.length); optimizable.getValueGradient (g); System.arraycopy (g, 0, oldg, 0, g.length); System.arraycopy (g, 0, direction, 0, g.length); optimizable.getParameters (parameters); optimizable.getValueGradient(g); logger.fine ("after initial jump: \ndirection.2norm: " + MatrixOps.twoNorm (direction) + " \ngradient.2norm: " double value = optimizable.getValue(); logger.fine("L-BFGS iteration="+iterationCount +", value="+value+" g.twoNorm: "+MatrixOps.twoNorm(g)+ optimizable.getParameters (parameters); optimizable.getValueGradient(g); logger.fine ("after linesearch: direction.2norm: " + MatrixOps.twoNorm (direction));
double initialValue = optimizable.getValue(); logger.fine("Entering L-BFGS.optimize(). Initial Value="+initialValue); parameters = new double[optimizable.getNumParameters()]; oldParameters = new double[optimizable.getNumParameters()]; g = new double[optimizable.getNumParameters()]; oldg = new double[optimizable.getNumParameters()]; direction = new double[optimizable.getNumParameters()]; optimizable.getParameters (parameters); System.arraycopy (parameters, 0, oldParameters, 0, parameters.length); optimizable.getValueGradient (g); System.arraycopy (g, 0, oldg, 0, g.length); System.arraycopy (g, 0, direction, 0, g.length); optimizable.getParameters (parameters); optimizable.getValueGradient(g); logger.fine ("after initial jump: \ndirection.2norm: " + MatrixOps.twoNorm (direction) + " \ngradient.2norm: " double value = optimizable.getValue(); logger.fine("L-BFGS iteration="+iterationCount +", value="+value+" g.twoNorm: "+MatrixOps.twoNorm(g)+ optimizable.getParameters (parameters); optimizable.getValueGradient(g); logger.fine ("after linesearch: direction.2norm: " + MatrixOps.twoNorm (direction));
double initialValue = optimizable.getValue(); logger.fine("Entering L-BFGS.optimize(). Initial Value="+initialValue); parameters = new double[optimizable.getNumParameters()]; oldParameters = new double[optimizable.getNumParameters()]; g = new double[optimizable.getNumParameters()]; oldg = new double[optimizable.getNumParameters()]; direction = new double[optimizable.getNumParameters()]; optimizable.getParameters (parameters); System.arraycopy (parameters, 0, oldParameters, 0, parameters.length); optimizable.getValueGradient (g); System.arraycopy (g, 0, oldg, 0, g.length); System.arraycopy (g, 0, direction, 0, g.length); optimizable.getParameters (parameters); optimizable.getValueGradient(g); logger.fine ("after initial jump: \ndirection.2norm: " + MatrixOps.twoNorm (direction) + " \ngradient.2norm: " double value = optimizable.getValue(); logger.fine("L-BFGS iteration="+iterationCount +", value="+value+" g.twoNorm: "+MatrixOps.twoNorm(g)+ optimizable.getParameters (parameters); optimizable.getValueGradient(g); logger.fine ("after linesearch: direction.2norm: " + MatrixOps.twoNorm (direction));
double rhs1, rhs2, a, b, disc, oldAlam; double f, fold, f2; g = new double[function.getNumParameters()]; // gradient x = new double[function.getNumParameters()]; // parameters oldParameters = new double[function.getNumParameters()]; function.getParameters (x); System.arraycopy (x, 0, oldParameters, 0, x.length); function.getValueGradient (g); alam2 = tmplam = 0.0; f2 = fold = function.getValue(); if (logger.isLoggable(Level.FINE)) { logger.fine ("ENTERING BACKTRACK\n"); function.setParameters(oldParameters); f = function.getValue(); logger.warning("EXITING BACKTRACK: Jump too small (alamin="+alamin+"). Exiting and using xold. Value="+f); return 0.0; function.setParameters(x); oldAlam = alam; f = function.getValue(); tmplam = .2 * alam; if (alam < alamin) { //convergence on delta x function.setParameters(oldParameters); f = function.getValue(); logger.warning("EXITING BACKTRACK: Jump too small. Exiting and using xold. Value="+f); return 0.0;
.getTotalWeight(); double optimizableValue = 0, gradientNorm = 0; double[] gradient = new double[mcrf.getNumParameters()]; constrainedWeight = new SumLatticeDefault(crf, fvs, ss) .getTotalWeight(); optimizableValue = mcrf.getValue(); mcrf.getValueGradient(gradient); gradientNorm = MatrixOps.oneNorm(gradient); System.out.println("parameters " + i + " " + j + " " + k
double[] parameters = new double[optimizable.getNumParameters()]; double[] gradient = new double[optimizable.getNumParameters()]; optimizable.getParameters(parameters); optimizable.getValueGradient(gradient); ty = ay = by = cy = origY = optimizable.getValue(); optimizable.setParameters (parameters); ty = optimizable.getValue(); optimizable.getValueGradient(gradient); tg = MatrixOps.dotProduct(gradient,line); optimizable.setParameters (parameters); by = optimizable.getValue(); assert (!Double.isNaN(by)); optimizable.getValueGradient(gradient); bg = MatrixOps.dotProduct(gradient,line); ox = bx; optimizable.setParameters (parameters); logger.info ("Ending cost = "+optimizable.getValue());
double[] parameters = new double[optimizable.getNumParameters()]; double[] gradient = new double[optimizable.getNumParameters()]; optimizable.getParameters(parameters); optimizable.getValueGradient(gradient); ty = ay = by = cy = origY = optimizable.getValue(); optimizable.setParameters (parameters); ty = optimizable.getValue(); optimizable.getValueGradient(gradient); tg = MatrixOps.dotProduct(gradient,line); optimizable.setParameters (parameters); by = optimizable.getValue(); assert (!Double.isNaN(by)); optimizable.getValueGradient(gradient); bg = MatrixOps.dotProduct(gradient,line); ox = bx; optimizable.setParameters (parameters); logger.info ("Ending cost = "+optimizable.getValue());
.getTotalWeight(); double optimizableValue = 0, gradientNorm = 0; double[] gradient = new double[mcrf.getNumParameters()]; constrainedWeight = new SumLatticeDefault(crf, fvs, ss) .getTotalWeight(); optimizableValue = mcrf.getValue(); mcrf.getValueGradient(gradient); gradientNorm = MatrixOps.oneNorm(gradient); System.out.println("parameters " + i + " " + j + " " + k
double[] parameters = new double[optimizable.getNumParameters()]; double[] gradient = new double[optimizable.getNumParameters()]; optimizable.getParameters(parameters); optimizable.getValueGradient(gradient); ty = ay = by = cy = origY = optimizable.getValue(); optimizable.setParameters (parameters); ty = optimizable.getValue(); optimizable.getValueGradient(gradient); tg = MatrixOps.dotProduct(gradient,line); optimizable.setParameters (parameters); by = optimizable.getValue(); assert (!Double.isNaN(by)); optimizable.getValueGradient(gradient); bg = MatrixOps.dotProduct(gradient,line); ox = bx; optimizable.setParameters (parameters); logger.info ("Ending cost = "+optimizable.getValue());
double rhs1, rhs2, a, b, disc, oldAlam; double f, fold, f2; g = new double[function.getNumParameters()]; // gradient x = new double[function.getNumParameters()]; // parameters oldParameters = new double[function.getNumParameters()]; function.getParameters (x); System.arraycopy (x, 0, oldParameters, 0, x.length); function.getValueGradient (g); alam2 = tmplam = 0.0; f2 = fold = function.getValue(); if (logger.isLoggable(Level.FINE)) { logger.fine ("ENTERING BACKTRACK\n"); function.setParameters(oldParameters); f = function.getValue(); logger.warning("EXITING BACKTRACK: Jump too small (alamin="+alamin+"). Exiting and using xold. Value="+f); return 0.0; function.setParameters(x); oldAlam = alam; f = function.getValue(); tmplam = .2 * alam; if (alam < alamin) { //convergence on delta x function.setParameters(oldParameters); f = function.getValue(); logger.warning("EXITING BACKTRACK: Jump too small. Exiting and using xold. Value="+f); return 0.0;
testValueAndGradientCurrentParameters (Optimizable.ByGradientValue maxable) double[] parameters = new double [maxable.getNumParameters()]; double value = maxable.getValue(); double[] analyticGradient = new double[maxable.getNumParameters()]; double[] empiricalGradient = new double[maxable.getNumParameters()]; maxable.getParameters (parameters); maxable.getValueGradient (analyticGradient); maxable.getValueGradient (empiricalGradient); parameters[i] = param + epsilon; maxable.setParameters (parameters); double epsValue = maxable.getValue(); double slope = (epsValue - value) / epsilon; System.out.println ("value="+value+" epsValue="+epsValue+" slope["+i+"] = "+slope+" gradient[]="+analyticGradient[i]);
testValueAndGradientCurrentParameters (Optimizable.ByGradientValue maxable) double[] parameters = new double [maxable.getNumParameters()]; double value = maxable.getValue(); double[] analyticGradient = new double[maxable.getNumParameters()]; double[] empiricalGradient = new double[maxable.getNumParameters()]; maxable.getParameters (parameters); maxable.getValueGradient (analyticGradient); maxable.getValueGradient (empiricalGradient); parameters[i] = param + epsilon; maxable.setParameters (parameters); double epsValue = maxable.getValue(); double slope = (epsValue - value) / epsilon; System.out.println ("value="+value+" epsValue="+epsValue+" slope["+i+"] = "+slope+" gradient[]="+analyticGradient[i]);
currentValue = macrf.getValue (); if (Math.abs (currentValue - prevValue) < thresh) {
double constrainedCost = new SumLatticeDefault (crf, fvs, ss).getTotalWeight(); double minimizableCost = 0, minimizableGradientNorm = 0; double[] gradient = new double [mcrf.getNumParameters()]; unconstrainedCost = new SumLatticeDefault (crf, fvs).getTotalWeight(); constrainedCost = new SumLatticeDefault (crf, fvs, ss).getTotalWeight(); minimizableCost = mcrf.getValue (); mcrf.getValueGradient (gradient); minimizableGradientNorm = MatrixOps.oneNorm (gradient); System.out.println("parameters " + i + " " + j + " " + k
currentValue = macrf.getValue (); if (Math.abs (currentValue - prevValue) < thresh) {
currentValue = macrf.getValue (); if (Math.abs (currentValue - prevValue) < thresh) {
double constrainedCost = new SumLatticeDefault (crf, fvs, ss).getTotalWeight(); double minimizableCost = 0, minimizableGradientNorm = 0; double[] gradient = new double [mcrf.getNumParameters()]; unconstrainedCost = new SumLatticeDefault (crf, fvs).getTotalWeight(); constrainedCost = new SumLatticeDefault (crf, fvs, ss).getTotalWeight(); minimizableCost = mcrf.getValue (); mcrf.getValueGradient (gradient); minimizableGradientNorm = MatrixOps.oneNorm (gradient); System.out.println("parameters " + i + " " + j + " " + k