public void setParameter (int[] indices, double value) { assert (indices[0] == 0); parameters.setValue (0, value); } public void setParameter (double value) {
public void setParameter (double value) { parameters.setValue (0, value); }
public Matrix getCostGradient (Matrix m) { // This gradient points up-hill, as it should double x = parameters.value(0); ((DenseVector)m).setValue (0, 2*a*x + b); return m; } }
public Matrix getParameters (Matrix m) { assert (m instanceof DenseVector && ((Vector)m).singleSize() == numParameters); DenseVector parameters = (DenseVector)m; int pi = 0; for (int i = 0; i < numStates(); i++) { State s = (State) getState (i); parameters.setValue (pi++, -s.initialCost); parameters.setValue (pi++, -s.finalCost); } for (int i = 0; i < weights.length; i++) { parameters.setValue (pi++, defaultWeights[i]); int nl = weights[i].numLocations(); for (int j = 0; j < nl; j++) parameters.setValue (pi++, weights[i].valueAtLocation(j)); } return parameters; }
public Matrix getParameters (Matrix m) { assert (m instanceof DenseVector && ((Vector)m).singleSize() == numParameters); DenseVector parameters = (DenseVector)m; int pi = 0; for (int i = 0; i < numStates(); i++) { State s = (State) getState (i); parameters.setValue (pi++, -s.initialCost); parameters.setValue (pi++, -s.finalCost); } for (int i = 0; i < weights.length; i++) { parameters.setValue (pi++, defaultWeights[i]); int nl = weights[i].numLocations(); for (int j = 0; j < nl; j++) parameters.setValue (pi++, weights[i].valueAtLocation(j)); } return parameters; }
public void setParameter (int sourceStateIndex, int destStateIndex, int featureIndex, double value) { cachedCostStale = cachedGradientStale = true; State source = (State)getState(sourceStateIndex); State dest = (State) getState(destStateIndex); int rowIndex; for (rowIndex = 0; rowIndex < source.destinationNames.length; rowIndex++) if (source.destinationNames[rowIndex].equals (dest.name)) break; if (rowIndex == source.destinationNames.length) throw new IllegalArgumentException ("No transtition from state "+sourceStateIndex+" to state "+destStateIndex+"."); DenseVector v = weights[source.weightsIndices[rowIndex]]; v.setValue (featureIndex, value); }
public Matrix getParameters (Matrix m) { assert (m instanceof DenseVector && ((Vector)m).singleSize() == numParameters); DenseVector parameters = (DenseVector)m; int pi = 0; for (int i = 0; i < numStates(); i++) { State s = (State) getState (i); parameters.setValue (pi++, -s.initialCost); parameters.setValue (pi++, -s.finalCost); } for (int i = 0; i < weights.length; i++) { parameters.setValue (pi++, defaultWeights[i]); int nl = weights[i].numLocations(); for (int j = 0; j < nl; j++) parameters.setValue (pi++, weights[i].valueAtLocation(j)); } return parameters; }
public Matrix getParameters (Matrix m) { assert (m instanceof DenseVector && ((Vector)m).singleSize() == numParameters); DenseVector parameters = (DenseVector)m; int pi = 0; for (int i = 0; i < numStates(); i++) { State s = (State) getState (i); parameters.setValue (pi++, -s.initialCost); parameters.setValue (pi++, -s.finalCost); } for (int i = 0; i < weights.length; i++) pi = parameters.arrayCopyFrom (pi, weights[i]); return parameters; }
public void getParameters (double[] buffer) { if (buffer.length != getNumParameters ()) buffer = new double [getNumParameters()]; DenseVector parameters = new DenseVector (buffer, true); int pi = 0; for (int i = 0; i < numStates(); i++) { State s = (State) getState (i); parameters.setValue (pi++, -s.initialCost); parameters.setValue (pi++, -s.finalCost); } for (int i = 0; i < weights.length; i++) { parameters.setValue (pi++, defaultWeights[i]); int nl = weights[i].numLocations(); for (int j = 0; j < nl; j++) parameters.setValue (pi++, weights[i].valueAtLocation(j)); } parameters.arrayCopyTo (0, buffer); }
protected DenseVector getDenseVectorOf (int ri, Matrix2 matrix) { int dims[] = new int [2]; matrix.getDimensions(dims); DenseVector vec = new DenseVector (dims[1]); for (int i=0; i < dims[1]; i++) { vec.setValue (i, matrix.value(ri,i)); } return vec; }
protected DenseVector getDenseVectorOf (int ri, Matrix2 matrix) { int dims[] = new int [2]; matrix.getDimensions(dims); DenseVector vec = new DenseVector (dims[1]); for (int i=0; i < dims[1]; i++) { vec.setValue (i, matrix.value(ri,i)); } return vec; }
/** Increase the size of the weights[] parameters to match (a new, larger) input Alphabet size */ public void growWeightsDimensionToInputAlphabet () { int vs = inputAlphabet.size(); if (vs == this.defaultFeatureIndex) // Doesn't need to grow return; assert (vs > this.defaultFeatureIndex); setTrainable (false); for (int i = 0; i < weights.length; i++) { DenseVector newWeights = new DenseVector (vs+1); newWeights.arrayCopyFrom (0, weights[i]); newWeights.setValue (vs, weights[i].value (defaultFeatureIndex)); newWeights.setValue (defaultFeatureIndex, 0); weights[i] = newWeights; } this.defaultFeatureIndex = vs; cachedCostStale = true; cachedGradientStale = true; }
private void computeGISUpdate(DenseVector lambda, DenseVector updates, double sigma, double s) { double p = 1/(s*sigma*sigma); double inv_s = 1/(sigma*sigma); int pi = 0; for(int i = 0; i < numStates(); i++) { updates.setValue(pi,gis_solver(lambda.value(pi)*inv_s, p, 1.0, 1.0)/s); pi++; updates.setValue(pi,gis_solver(lambda.value(pi)*inv_s, p, 1.0, 1.0)/s); pi++; } for (int i = 0; i < weights.length; i++) { updates.setValue(pi,gis_solver(lambda.value(pi)*inv_s, p, defaultConstraints[i], defaultExpectations[i])/s); pi++; int nl = weights[i].numLocations(); for (int j = 0; j < nl; j++) { updates.setValue(pi,gis_solver(lambda.value(pi)*inv_s, p, constraints[i].valueAtLocation(j), expectations[i].valueAtLocation(j))/s); pi++; } } }
public void testOne () { DenseVector line = new DenseVector (1); LineMinimizer searcher = new GoldenLineMinimizer (); // The parabola y=x^2 with minimum at x=0 Quadratic q = new Quadratic (1, 0, 0); System.out.println ("start=-10, step=1"); q.setParameter (-10); line.setValue (0, 1.0); searcher.minimize (q, line, 1); System.out.println ("x="+q.getParameter()); assertTrue (Math.abs (q.getParameter() - 0.0) < 0.0001); System.out.println ("start=10, step=1"); q.setParameter (10); line.setValue (0, -1.0); searcher.minimize (q, line, 1); System.out.println ("x="+q.getParameter()); assertTrue (Math.abs (q.getParameter() - 0.0) < 0.0001); System.out.println ("start=10, step=100"); q.setParameter (10); line.setValue (0, -1.0); searcher.minimize (q, line, 100); System.out.println ("x="+q.getParameter()); assertTrue (Math.abs (q.getParameter() - 0.0) < 0.0001); }
for (int i = 0; i < numStates(); i++) { State s = (State) getState (i); cachedGradient.setValue (gi++, (Double.isInfinite(s.initialCost) ? 0.0 : (s.initialExpectation cachedGradient.setValue (gi++, (Double.isInfinite (s.finalCost) ? 0.0 : s.finalExpectation cachedGradient.setValue (gi++, (Double.isInfinite (defaultWeights[i]) ? 0.0 : (defaultExpectations[i] System.out.println ("CRF gradient["+crf.getWeightsName(i)+"][<DEFAULT_FEATURE>]="+cachedGradient.value(gi-1)); for (int j = 0; j < weights[i].numLocations(); j++) { cachedGradient.setValue (gi++, (Double.isInfinite (weights[i].valueAtLocation(j)) ? 0.0 : (expectations[i].valueAtLocation(j) cachedGradient.setValue (gi++, (Double.isInfinite (defaultWeights[i]) ? 0.0 : (defaultExpectations[i] System.out.println ("CRF gradient["+crf.getWeightsName(i)+"][<DEFAULT_FEATURE>]="+cachedGradient.value(gi-1)); for (int j = 0; j < weights[i].numLocations(); j++) { cachedGradient.setValue (gi++, (Double.isInfinite (weights[i].valueAtLocation(j)) ? 0.0 : (expectations[i].valueAtLocation(j)
for (int i = 0; i < numStates(); i++) { State s = (State) getState (i); cachedGradient.setValue (gi++, (Double.isInfinite(s.initialCost) ? 0.0 : (s.initialExpectation cachedGradient.setValue (gi++, (Double.isInfinite (s.finalCost) ? 0.0 : s.finalExpectation cachedGradient.setValue (gi++, (Double.isInfinite (defaultWeights[i]) ? 0.0 : (defaultExpectations[i] System.out.println ("CRF gradient["+crf.getWeightsName(i)+"][<DEFAULT_FEATURE>]="+cachedGradient.value(gi-1)); for (int j = 0; j < weights[i].numLocations(); j++) { cachedGradient.setValue (gi++, (Double.isInfinite (weights[i].valueAtLocation(j)) ? 0.0 : (expectations[i].valueAtLocation(j) cachedGradient.setValue (gi++, (Double.isInfinite (defaultWeights[i]) ? 0.0 : (defaultExpectations[i] System.out.println ("CRF gradient["+crf.getWeightsName(i)+"][<DEFAULT_FEATURE>]="+cachedGradient.value(gi-1)); for (int j = 0; j < weights[i].numLocations(); j++) { cachedGradient.setValue (gi++, (Double.isInfinite (weights[i].valueAtLocation(j)) ? 0.0 : (expectations[i].valueAtLocation(j)
for (int i = 0; i < numStates(); i++) { State s = (State) getState (i); cachedGradient.setValue (gi++, (Double.isInfinite(s.initialCost) ? 0.0 : (s.initialExpectation cachedGradient.setValue (gi++, (Double.isInfinite (s.finalCost) ? 0.0 : s.finalExpectation cachedGradient.setValue (gi++, (Double.isInfinite (weights[i].singleValue(j)) ? 0.0 : (expectations[i].singleValue(j) cachedGradient.setValue (gi++, (Double.isInfinite (weights[i].singleValue(j)) ? 0.0 : (expectations[i].singleValue(j)
cachedGradient.setValue (gi++, (Double.isInfinite(s.initialCost) ? 0.0 : (s.initialExpectation cachedGradient.setValue (gi++, (Double.isInfinite (s.finalCost) ? 0.0 : s.finalExpectation cachedGradient.setValue (gi++, (Double.isInfinite (defaultWeights[i]) ? 0.0 : (defaultExpectations[i] System.out.println ("CRF gradient["+crf.getWeightsName(i)+"][<DEFAULT_FEATURE>] (gidx:"+(gi-1)+"="+cachedGradient.value(gi-1)); for (int j = 0; j < weights[i].numLocations(); j++) { cachedGradient.setValue (gi++, (Double.isInfinite (weights[i].valueAtLocation(j)) ? 0.0 : (expectations[i].valueAtLocation(j) cachedGradient.setValue (gi++, (Double.isInfinite (defaultWeights[i]) ? 0.0 : (defaultExpectations[i] cachedGradient.setValue (gi++, (Double.isInfinite (weights[i].valueAtLocation(j)) ? 0.0 : (expectations[i].valueAtLocation(j)