public ConvexOptimizer getOptimizer() { if (optimizer != null) return optimizer; switch (conf.getOptimizationAlgo()) { case LBFGS: optimizer = new LBFGS(conf, stepFunction, listeners, model); break; case LINE_GRADIENT_DESCENT: optimizer = new LineGradientDescent(conf, stepFunction, listeners, model); break; case CONJUGATE_GRADIENT: optimizer = new ConjugateGradient(conf, stepFunction, listeners, model); break; case STOCHASTIC_GRADIENT_DESCENT: optimizer = new StochasticGradientDescent(conf, stepFunction, listeners, model); break; default: throw new IllegalStateException("No optimizer found"); } return optimizer; }
/** * Run SGD based on the given labels */ public void finetune() { if (!layerWiseConfigurations.isBackprop()) { log.warn("Warning: finetune is not applied."); return; } if (!(getOutputLayer() instanceof IOutputLayer)) { log.warn("Output layer not instance of output layer returning."); return; } if (flattenedGradients == null) { initGradientsView(); } if (labels == null) throw new IllegalStateException("No labels found"); log.info("Finetune phase"); IOutputLayer output = (IOutputLayer) getOutputLayer(); if (output.conf().getOptimizationAlgo() != OptimizationAlgorithm.HESSIAN_FREE) { feedForward(); output.fit(output.input(), labels); } else { throw new UnsupportedOperationException(); } }
@Test public void testOptimizationAlgo() throws Exception { for (OptimizationAlgorithm optAlgo : OptimizationAlgorithm.values()) { NeuralNetConfiguration conf = new NeuralNetConfiguration(); conf.setOptimizationAlgo(optAlgo); log.info(optAlgo.toString()); final Dl4jMlpClassifier clf = setupClf(conf); final OptimizationAlgorithm actual = clf.getModel().conf().getOptimizationAlgo(); if (!actual.equals(optAlgo)) { failMessage.append(String.format("actual=%s,expected=%s", actual, optAlgo)); } } }