List of usage examples for org.deeplearning4j.nn.multilayer MultiLayerNetwork init
public void init()
From source file:cnn.image.classification.CNNImageClassification.java
public static void main(String[] args) { int nChannels = 3; int outputNum = 10; // int numExamples = 80; int batchSize = 10; int nEpochs = 20; int iterations = 1; int seed = 123; int height = 32; int width = 32; Random randNumGen = new Random(seed); System.out.println("Load data...."); File parentDir = new File("train1/"); FileSplit filesInDir = new FileSplit(parentDir, allowedExtensions, randNumGen); ParentPathLabelGenerator labelMaker = new ParentPathLabelGenerator(); BalancedPathFilter pathFilter = new BalancedPathFilter(randNumGen, allowedExtensions, labelMaker); //Split the image files into train and test. Specify the train test split as 80%,20% InputSplit[] filesInDirSplit = filesInDir.sample(pathFilter, 100, 0); InputSplit[] filesInDirSplitTest = filesInDir.sample(pathFilter, 0, 100); InputSplit trainData = filesInDirSplit[0]; InputSplit testData = filesInDirSplitTest[1]; System.out.println("train = " + trainData.length()); System.out.println("test = " + testData.length()); //Specifying a new record reader with the height and width you want the images to be resized to. //Note that the images in this example are all of different size //They will all be resized to the height and width specified below ImageRecordReader recordReader = new ImageRecordReader(height, width, nChannels, labelMaker); //Often there is a need to transforming images to artificially increase the size of the dataset recordReader.initialize(trainData);// www. j av a2 s . c om DataSetIterator dataIterTrain = new RecordReaderDataSetIterator(recordReader, batchSize, 1, outputNum); // recordReader.reset(); recordReader.initialize(testData); DataSetIterator dataIterTest = new RecordReaderDataSetIterator(recordReader, batchSize, 1, outputNum); DataNormalization scaler = new ImagePreProcessingScaler(0, 1); dataIterTrain.setPreProcessor(scaler); dataIterTest.setPreProcessor(scaler); System.out.println("Build model...."); MultiLayerConfiguration.Builder builder = new NeuralNetConfiguration.Builder().seed(seed) .iterations(iterations).regularization(true).l2(0.0005) // .dropOut(0.5) .learningRate(0.001)//.biasLearningRate(0.02) //.learningRateDecayPolicy(LearningRatePolicy.Inverse).lrPolicyDecayRate(0.001).lrPolicyPower(0.75) .weightInit(WeightInit.XAVIER).optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) .updater(Updater.NESTEROVS).momentum(0.9).list() .layer(0, new ConvolutionLayer.Builder(5, 5).nIn(nChannels).stride(1, 1).nOut(20) .activation("identity").build()) .layer(1, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX).kernelSize(2, 2).stride(2, 2) .build()) .layer(2, new ConvolutionLayer.Builder(5, 5).stride(1, 1).nOut(50).activation("identity").build()) .layer(3, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX) .kernelSize(2, 2).stride(2, 2).build()) .layer(4, new DenseLayer.Builder().activation("relu").nOut(500).build()) .layer(5, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD).nOut(outputNum) .activation("softmax").build()) .setInputType(InputType.convolutional(height, width, nChannels)) //See note below .backprop(true).pretrain(false); MultiLayerConfiguration b = new NeuralNetConfiguration.Builder().seed(seed).iterations(iterations) .regularization(false).l2(0.005) // tried 0.0001, 0.0005 .learningRate(0.0001) // tried 0.00001, 0.00005, 0.000001 .weightInit(WeightInit.XAVIER).optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) .updater(Updater.NESTEROVS).momentum(0.9).list().layer(0, new ConvolutionLayer.Builder(5, 5) //nIn and nOut specify depth. nIn here is the nChannels and nOut is the number of filters to be applied .nIn(nChannels).stride(1, 1).nOut(50) // tried 10, 20, 40, 50 .activation("relu").build()) .layer(1, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX) .kernelSize(2, 2).stride(2, 2).build()) .layer(2, new ConvolutionLayer.Builder(5, 5).stride(1, 1).nOut(100) // tried 25, 50, 100 .activation("relu").build()) .layer(3, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX) .kernelSize(2, 2).stride(2, 2).build()) .layer(4, new DenseLayer.Builder().activation("relu").nOut(500).build()) .layer(5, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD).nOut(outputNum) .activation("softmax").build()) .backprop(true).pretrain(false).cnnInputSize(height, width, nChannels).build(); MultiLayerConfiguration conf = builder.build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); System.out.println("Train model...."); model.setListeners(new ScoreIterationListener(1)); // for( int i=0; i<nEpochs; i++ ) { // model.setListeners(new HistogramIterationListener(1)); MultipleEpochsIterator trainIter = new MultipleEpochsIterator(nEpochs, dataIterTrain, 2); model.fit(trainIter); // System.out.println("*** Completed epoch - " + i + " ***"); System.out.println("Evaluate model...."); // Evaluation eval = new Evaluation(outputNum); // while(dataIterTest.hasNext()){ // DataSet ds = dataIterTest.next(); // INDArray output = model.output(ds.getFeatureMatrix(), false); // eval.eval(ds.getLabels(), output); // } // System.out.println(eval.stats()); // dataIterTest.reset(); // } Evaluation eval1 = model.evaluate(dataIterTest); System.out.println(eval1.stats()); System.out.println("****************Example finished********************"); }
From source file:com.example.android.displayingbitmaps.ui.ImageGridActivity.java
License:Apache License
public void trainMLP() throws Exception { Nd4j.ENFORCE_NUMERICAL_STABILITY = true; final int numRows = 28; final int numColumns = 28; int outputNum = 10; int numSamples = 10000; int batchSize = 500; int iterations = 10; int seed = 123; int listenerFreq = iterations / 5; int splitTrainNum = (int) (batchSize * .8); DataSet mnist;/*w w w.j av a 2 s .c om*/ SplitTestAndTrain trainTest; DataSet trainInput; List<INDArray> testInput = new ArrayList<>(); List<INDArray> testLabels = new ArrayList<>(); log.info("Load data...."); DataSetIterator mnistIter = new MnistDataSetIterator(batchSize, numSamples, true); log.info("Build model...."); MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(seed) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(iterations) .gradientNormalization(GradientNormalization.RenormalizeL2PerLayer).learningRate(1e-1f) .momentum(0.5).momentumAfter(Collections.singletonMap(3, 0.9)).useDropConnect(true).list(2) .layer(0, new DenseLayer.Builder().nIn(numRows * numColumns).nOut(1000).activation("relu") .weightInit(WeightInit.XAVIER).build()) .layer(1, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD).nIn(1000).nOut(outputNum) .activation("softmax").weightInit(WeightInit.XAVIER).build()) .build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(Arrays.asList((IterationListener) new ScoreIterationListener(listenerFreq))); log.info("Train model...."); model.setListeners(Arrays.asList((IterationListener) new ScoreIterationListener(listenerFreq))); while (mnistIter.hasNext()) { mnist = mnistIter.next(); trainTest = mnist.splitTestAndTrain(splitTrainNum, new Random(seed)); // train set that is the result trainInput = trainTest.getTrain(); // get feature matrix and labels for training testInput.add(trainTest.getTest().getFeatureMatrix()); testLabels.add(trainTest.getTest().getLabels()); model.fit(trainInput); } log.info("Evaluate model...."); Evaluation eval = new Evaluation(outputNum); for (int i = 0; i < testInput.size(); i++) { INDArray output = model.output(testInput.get(i)); eval.eval(testLabels.get(i), output); } log.info(eval.stats()); log.info("****************Example finished********************"); }
From source file:com.heatonresearch.aifh.examples.ann.LearnAutoMPGBackprop.java
License:Apache License
/** * The main method./*ww w. ja va2 s. c o m*/ * @param args Not used. */ public static void main(String[] args) { try { int seed = 43; double learningRate = 0.01; // Setup training data. final InputStream istream = LearnAutoMPGBackprop.class.getResourceAsStream("/auto-mpg.data.csv"); if (istream == null) { System.out.println("Cannot access data set, make sure the resources are available."); System.exit(1); } final NormalizeDataSet ds = NormalizeDataSet.load(istream); istream.close(); // The following ranges are setup for the Auto MPG data set. If you wish to normalize other files you will // need to modify the below function calls other files. // First remove some columns that we will not use: ds.deleteColumn(8); // Car name ds.deleteColumn(7); // Car origin ds.deleteColumn(6); // Year ds.deleteUnknowns(); ds.normalizeZScore(1); ds.normalizeZScore(2); ds.normalizeZScore(3); ds.normalizeZScore(4); ds.normalizeZScore(5); DataSet next = ds.extractSupervised(1, 4, 0, 1); next.shuffle(); // Training and validation data split int splitTrainNum = (int) (next.numExamples() * .75); SplitTestAndTrain testAndTrain = next.splitTestAndTrain(splitTrainNum, new Random(seed)); DataSet trainSet = testAndTrain.getTrain(); DataSet validationSet = testAndTrain.getTest(); DataSetIterator trainSetIterator = new ListDataSetIterator(trainSet.asList(), trainSet.numExamples()); DataSetIterator validationSetIterator = new ListDataSetIterator(validationSet.asList(), validationSet.numExamples()); // Create neural network. int numInputs = next.numInputs(); int numOutputs = next.numOutcomes(); int numHiddenNodes = 50; MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(seed).iterations(1) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).learningRate(learningRate) .updater(Updater.NESTEROVS).momentum(0.9).list(2) .layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes) .weightInit(WeightInit.XAVIER).activation("relu").build()) .layer(1, new OutputLayer.Builder(LossFunction.MSE).weightInit(WeightInit.XAVIER) .activation("identity").nIn(numHiddenNodes).nOut(numOutputs).build()) .pretrain(false).backprop(true).build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(new ScoreIterationListener(1)); // Define when we want to stop training. EarlyStoppingModelSaver saver = new InMemoryModelSaver(); EarlyStoppingConfiguration esConf = new EarlyStoppingConfiguration.Builder() .epochTerminationConditions(new MaxEpochsTerminationCondition(500)) //Max of 50 epochs .epochTerminationConditions(new ScoreImprovementEpochTerminationCondition(25)) .evaluateEveryNEpochs(1).scoreCalculator(new DataSetLossCalculator(validationSetIterator, true)) //Calculate test set score .modelSaver(saver).build(); EarlyStoppingTrainer trainer = new EarlyStoppingTrainer(esConf, conf, trainSetIterator); // Train and display result. EarlyStoppingResult result = trainer.fit(); System.out.println("Termination reason: " + result.getTerminationReason()); System.out.println("Termination details: " + result.getTerminationDetails()); System.out.println("Total epochs: " + result.getTotalEpochs()); System.out.println("Best epoch number: " + result.getBestModelEpoch()); System.out.println("Score at best epoch: " + result.getBestModelScore()); model = saver.getBestModel(); // Evaluate validationSetIterator.reset(); for (int i = 0; i < validationSet.numExamples(); i++) { DataSet t = validationSet.get(i); INDArray features = t.getFeatureMatrix(); INDArray labels = t.getLabels(); INDArray predicted = model.output(features, false); System.out.println(features + ":Prediction(" + predicted + "):Actual(" + labels + ")"); } } catch (Exception ex) { ex.printStackTrace(); } }
From source file:com.heatonresearch.aifh.examples.ann.LearnDigitsBackprop.java
License:Apache License
/** * The main method./*from ww w . j a v a 2s. c o m*/ * @param args Not used. */ public static void main(String[] args) { try { int seed = 43; double learningRate = 1e-2; int nEpochs = 50; int batchSize = 500; // Setup training data. System.out.println("Please wait, reading MNIST training data."); String dir = System.getProperty("user.dir"); MNISTReader trainingReader = MNIST.loadMNIST(dir, true); MNISTReader validationReader = MNIST.loadMNIST(dir, false); DataSet trainingSet = trainingReader.getData(); DataSet validationSet = validationReader.getData(); DataSetIterator trainSetIterator = new ListDataSetIterator(trainingSet.asList(), batchSize); DataSetIterator validationSetIterator = new ListDataSetIterator(validationSet.asList(), validationReader.getNumRows()); System.out.println("Training set size: " + trainingReader.getNumImages()); System.out.println("Validation set size: " + validationReader.getNumImages()); System.out.println(trainingSet.get(0).getFeatures().size(1)); System.out.println(validationSet.get(0).getFeatures().size(1)); int numInputs = trainingReader.getNumCols() * trainingReader.getNumRows(); int numOutputs = 10; int numHiddenNodes = 200; // Create neural network. MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(seed).iterations(1) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).learningRate(learningRate) .updater(Updater.NESTEROVS).momentum(0.9).regularization(true).dropOut(0.50).list(2) .layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes) .weightInit(WeightInit.XAVIER).activation("relu").build()) .layer(1, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD) .weightInit(WeightInit.XAVIER).activation("softmax").nIn(numHiddenNodes) .nOut(numOutputs).build()) .pretrain(false).backprop(true).build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(new ScoreIterationListener(1)); // Define when we want to stop training. EarlyStoppingModelSaver saver = new InMemoryModelSaver(); EarlyStoppingConfiguration esConf = new EarlyStoppingConfiguration.Builder() //.epochTerminationConditions(new MaxEpochsTerminationCondition(10)) .epochTerminationConditions(new ScoreImprovementEpochTerminationCondition(5)) .evaluateEveryNEpochs(1).scoreCalculator(new DataSetLossCalculator(validationSetIterator, true)) //Calculate test set score .modelSaver(saver).build(); EarlyStoppingTrainer trainer = new EarlyStoppingTrainer(esConf, conf, trainSetIterator); // Train and display result. EarlyStoppingResult result = trainer.fit(); System.out.println("Termination reason: " + result.getTerminationReason()); System.out.println("Termination details: " + result.getTerminationDetails()); System.out.println("Total epochs: " + result.getTotalEpochs()); System.out.println("Best epoch number: " + result.getBestModelEpoch()); System.out.println("Score at best epoch: " + result.getBestModelScore()); model = saver.getBestModel(); // Evaluate Evaluation eval = new Evaluation(numOutputs); validationSetIterator.reset(); for (int i = 0; i < validationSet.numExamples(); i++) { DataSet t = validationSet.get(i); INDArray features = t.getFeatureMatrix(); INDArray labels = t.getLabels(); INDArray predicted = model.output(features, false); eval.eval(labels, predicted); } //Print the evaluation statistics System.out.println(eval.stats()); } catch (Exception ex) { ex.printStackTrace(); } }
From source file:com.heatonresearch.aifh.examples.ann.LearnDigitsConv.java
License:Apache License
/** * The main method./*from w w w.j av a 2s . c om*/ * @param args Not used. */ public static void main(String[] args) { try { int seed = 43; double learningRate = 1e-2; int nEpochs = 50; int batchSize = 500; int channels = 1; // Setup training data. System.out.println("Please wait, reading MNIST training data."); String dir = System.getProperty("user.dir"); MNISTReader trainingReader = MNIST.loadMNIST(dir, true); MNISTReader validationReader = MNIST.loadMNIST(dir, false); DataSet trainingSet = trainingReader.getData(); DataSet validationSet = validationReader.getData(); DataSetIterator trainSetIterator = new ListDataSetIterator(trainingSet.asList(), batchSize); DataSetIterator validationSetIterator = new ListDataSetIterator(validationSet.asList(), validationReader.getNumRows()); System.out.println("Training set size: " + trainingReader.getNumImages()); System.out.println("Validation set size: " + validationReader.getNumImages()); int numOutputs = 10; // Create neural network. MultiLayerConfiguration.Builder builder = new NeuralNetConfiguration.Builder().seed(seed).iterations(1) .regularization(true).l2(0.0005).learningRate(0.01).weightInit(WeightInit.XAVIER) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).updater(Updater.NESTEROVS) .momentum(0.9).list(4) .layer(0, new ConvolutionLayer.Builder(5, 5).nIn(channels).stride(1, 1).nOut(20).dropOut(0.5) .activation("relu").build()) .layer(1, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX).kernelSize(2, 2) .stride(2, 2).build()) .layer(2, new DenseLayer.Builder().activation("relu").nOut(500).build()) .layer(3, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD).nOut(10) .activation("softmax").build()) .backprop(true).pretrain(false); new ConvolutionLayerSetup(builder, 28, 28, 1); MultiLayerConfiguration conf = builder.build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(new ScoreIterationListener(1)); // Define when we want to stop training. EarlyStoppingModelSaver saver = new InMemoryModelSaver(); EarlyStoppingConfiguration esConf = new EarlyStoppingConfiguration.Builder() //.epochTerminationConditions(new MaxEpochsTerminationCondition(10)) .epochTerminationConditions(new ScoreImprovementEpochTerminationCondition(5)) .evaluateEveryNEpochs(1).scoreCalculator(new DataSetLossCalculator(validationSetIterator, true)) //Calculate test set score .modelSaver(saver).build(); EarlyStoppingTrainer trainer = new EarlyStoppingTrainer(esConf, conf, trainSetIterator); // Train and display result. EarlyStoppingResult result = trainer.fit(); System.out.println("Termination reason: " + result.getTerminationReason()); System.out.println("Termination details: " + result.getTerminationDetails()); System.out.println("Total epochs: " + result.getTotalEpochs()); System.out.println("Best epoch number: " + result.getBestModelEpoch()); System.out.println("Score at best epoch: " + result.getBestModelScore()); model = saver.getBestModel(); // Evaluate Evaluation eval = new Evaluation(numOutputs); validationSetIterator.reset(); for (int i = 0; i < validationSet.numExamples(); i++) { DataSet t = validationSet.get(i); INDArray features = t.getFeatureMatrix(); INDArray labels = t.getLabels(); INDArray predicted = model.output(features, false); eval.eval(labels, predicted); } //Print the evaluation statistics System.out.println(eval.stats()); } catch (Exception ex) { ex.printStackTrace(); } }
From source file:com.heatonresearch.aifh.examples.ann.LearnDigitsDropout.java
License:Apache License
/** * The main method./*from w w w . java2 s . c o m*/ * @param args Not used. */ public static void main(String[] args) { try { int seed = 43; double learningRate = 1e-2; int nEpochs = 50; int batchSize = 500; // Setup training data. System.out.println("Please wait, reading MNIST training data."); String dir = System.getProperty("user.dir"); MNISTReader trainingReader = MNIST.loadMNIST(dir, true); MNISTReader validationReader = MNIST.loadMNIST(dir, false); DataSet trainingSet = trainingReader.getData(); DataSet validationSet = validationReader.getData(); DataSetIterator trainSetIterator = new ListDataSetIterator(trainingSet.asList(), batchSize); DataSetIterator validationSetIterator = new ListDataSetIterator(validationSet.asList(), validationReader.getNumRows()); System.out.println("Training set size: " + trainingReader.getNumImages()); System.out.println("Validation set size: " + validationReader.getNumImages()); System.out.println(trainingSet.get(0).getFeatures().size(1)); System.out.println(validationSet.get(0).getFeatures().size(1)); int numInputs = trainingReader.getNumCols() * trainingReader.getNumRows(); int numOutputs = 10; int numHiddenNodes = 100; // Create neural network. MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(seed).iterations(1) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).learningRate(learningRate) .updater(Updater.NESTEROVS).momentum(0.9).list(2) .layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes) .weightInit(WeightInit.XAVIER).activation("relu").build()) .layer(1, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD) .weightInit(WeightInit.XAVIER).activation("softmax").nIn(numHiddenNodes) .nOut(numOutputs).build()) .pretrain(false).backprop(true).build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(new ScoreIterationListener(1)); // Define when we want to stop training. EarlyStoppingModelSaver saver = new InMemoryModelSaver(); EarlyStoppingConfiguration esConf = new EarlyStoppingConfiguration.Builder() //.epochTerminationConditions(new MaxEpochsTerminationCondition(10)) .epochTerminationConditions(new ScoreImprovementEpochTerminationCondition(5)) .evaluateEveryNEpochs(1).scoreCalculator(new DataSetLossCalculator(validationSetIterator, true)) //Calculate test set score .modelSaver(saver).build(); EarlyStoppingTrainer trainer = new EarlyStoppingTrainer(esConf, conf, trainSetIterator); // Train and display result. EarlyStoppingResult result = trainer.fit(); System.out.println("Termination reason: " + result.getTerminationReason()); System.out.println("Termination details: " + result.getTerminationDetails()); System.out.println("Total epochs: " + result.getTotalEpochs()); System.out.println("Best epoch number: " + result.getBestModelEpoch()); System.out.println("Score at best epoch: " + result.getBestModelScore()); model = saver.getBestModel(); // Evaluate Evaluation eval = new Evaluation(numOutputs); validationSetIterator.reset(); for (int i = 0; i < validationSet.numExamples(); i++) { DataSet t = validationSet.get(i); INDArray features = t.getFeatureMatrix(); INDArray labels = t.getLabels(); INDArray predicted = model.output(features, false); eval.eval(labels, predicted); } //Print the evaluation statistics System.out.println(eval.stats()); } catch (Exception ex) { ex.printStackTrace(); } }
From source file:com.heatonresearch.aifh.examples.ann.LearnIrisBackprop.java
License:Apache License
/** * The main method./*from w w w. j a v a2s . c o m*/ * @param args Not used. */ public static void main(String[] args) { try { int seed = 43; double learningRate = 0.1; int splitTrainNum = (int) (150 * .75); int numInputs = 4; int numOutputs = 3; int numHiddenNodes = 50; // Setup training data. final InputStream istream = LearnIrisBackprop.class.getResourceAsStream("/iris.csv"); if (istream == null) { System.out.println("Cannot access data set, make sure the resources are available."); System.exit(1); } final NormalizeDataSet ds = NormalizeDataSet.load(istream); final CategoryMap species = ds.encodeOneOfN(4); // species is column 4 istream.close(); DataSet next = ds.extractSupervised(0, 4, 4, 3); next.shuffle(); // Training and validation data split SplitTestAndTrain testAndTrain = next.splitTestAndTrain(splitTrainNum, new Random(seed)); DataSet trainSet = testAndTrain.getTrain(); DataSet validationSet = testAndTrain.getTest(); DataSetIterator trainSetIterator = new ListDataSetIterator(trainSet.asList(), trainSet.numExamples()); DataSetIterator validationSetIterator = new ListDataSetIterator(validationSet.asList(), validationSet.numExamples()); // Create neural network. MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(seed).iterations(1) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).learningRate(learningRate) .updater(Updater.NESTEROVS).momentum(0.9).list(2) .layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes) .weightInit(WeightInit.XAVIER).activation("relu").build()) .layer(1, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD) .weightInit(WeightInit.XAVIER).activation("softmax").nIn(numHiddenNodes) .nOut(numOutputs).build()) .pretrain(false).backprop(true).build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(new ScoreIterationListener(1)); // Define when we want to stop training. EarlyStoppingModelSaver saver = new InMemoryModelSaver(); EarlyStoppingConfiguration esConf = new EarlyStoppingConfiguration.Builder() .epochTerminationConditions(new MaxEpochsTerminationCondition(500)) //Max of 50 epochs .epochTerminationConditions(new ScoreImprovementEpochTerminationCondition(25)) .evaluateEveryNEpochs(1).scoreCalculator(new DataSetLossCalculator(validationSetIterator, true)) //Calculate test set score .modelSaver(saver).build(); EarlyStoppingTrainer trainer = new EarlyStoppingTrainer(esConf, conf, trainSetIterator); // Train and display result. EarlyStoppingResult result = trainer.fit(); System.out.println("Termination reason: " + result.getTerminationReason()); System.out.println("Termination details: " + result.getTerminationDetails()); System.out.println("Total epochs: " + result.getTotalEpochs()); System.out.println("Best epoch number: " + result.getBestModelEpoch()); System.out.println("Score at best epoch: " + result.getBestModelScore()); model = saver.getBestModel(); // Evaluate Evaluation eval = new Evaluation(numOutputs); validationSetIterator.reset(); for (int i = 0; i < validationSet.numExamples(); i++) { DataSet t = validationSet.get(i); INDArray features = t.getFeatureMatrix(); INDArray labels = t.getLabels(); INDArray predicted = model.output(features, false); System.out.println(features + ":Prediction(" + findSpecies(labels, species) + "):Actual(" + findSpecies(predicted, species) + ")" + predicted); eval.eval(labels, predicted); } //Print the evaluation statistics System.out.println(eval.stats()); } catch (Exception ex) { ex.printStackTrace(); } }
From source file:com.heatonresearch.aifh.examples.ann.LearnXORBackprop.java
License:Apache License
/** * The main method.//from ww w.j ava2 s . c om * @param args Not used. */ public static void main(String[] args) { int seed = 43; double learningRate = 0.4; int nEpochs = 100; int numInputs = XOR_INPUT[0].length; int numOutputs = XOR_IDEAL[0].length; int numHiddenNodes = 4; // Setup training data. INDArray xorInput = Nd4j.create(XOR_INPUT); INDArray xorIdeal = Nd4j.create(XOR_IDEAL); DataSet xorDataSet = new DataSet(xorInput, xorIdeal); // Create neural network. MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(seed).iterations(1) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).learningRate(learningRate) .updater(Updater.NESTEROVS).momentum(0.9).list(2) .layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes).weightInit(WeightInit.XAVIER) .activation("relu").build()) .layer(1, new OutputLayer.Builder(LossFunction.MSE).weightInit(WeightInit.XAVIER) .activation("identity").nIn(numHiddenNodes).nOut(numOutputs).build()) .pretrain(false).backprop(true).build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(new ScoreIterationListener(1)); // Train for (int n = 0; n < nEpochs; n++) { model.fit(xorDataSet); } // Evaluate System.out.println("Evaluating neural network."); for (int i = 0; i < 4; i++) { INDArray input = xorInput.getRow(i); INDArray output = model.output(input); System.out.println(input + " : " + output); } }
From source file:Dl4j.Doc2VecWithAutoEncoder.java
public static void main(String[] args) throws FileNotFoundException, IOException { if (args.length < 1) { args = new String[1]; args[0] = "/home/procheta/NetBeansProjects/Dl4jTest/src/dl4jtest/init.properties"; }//from w w w .j a v a 2 s . c om String[] docs = { "The cat sat on the mat", "The dog sat on the mat", "The chicken ate the corn", "The corn was sweet", "The milk was sweet", "The dog sat on the mat", "The cat drank the milk", "The dog ate the bone" }; try { Properties prop = new Properties(); prop.load(new FileReader(args[0])); LuceneDocFetcher luceneDocFetcher; // test loading a simple collection of docs... // Create in-memory index RAMDirectory ramdir = new RAMDirectory(); IndexWriterConfig iwcfg = new IndexWriterConfig(new EnglishAnalyzer()); iwcfg.setOpenMode(IndexWriterConfig.OpenMode.CREATE); IndexWriter writer = new IndexWriter(ramdir, iwcfg); for (String doc : docs) { try { Document lDoc = new Document(); lDoc.add(new Field(LuceneDocFetcher.CONTENET_FIELD_NAME, doc, Field.Store.NO, Field.Index.ANALYZED, Field.TermVector.YES)); writer.addDocument(lDoc); } catch (Exception e) { } } writer.close(); Path path = Paths.get(prop.getProperty("index")); Directory dir = FSDirectory.open(path); Doc2VecWithAutoEncoder dva = new Doc2VecWithAutoEncoder(); System.out.println(prop.getProperty("depth")); ArrayList<String> docIds; dva.getDocIds(prop.getProperty("qid"), prop.getProperty("qrel")); // docIds = dva.subsample(Integer.parseInt(prop.getProperty("depth")), prop.getProperty("fileList"), prop.getProperty("qid"), prop.getProperty("folderPath")); // dva.saveSampleDocId(docIds, prop.getProperty("sampleOutput")); // pass the in-mem index reader to the vectorizer // luceneDocFetcher = new LuceneDocFetcher(dir, dva.docIds); luceneDocFetcher = new LuceneDocFetcher(dir, dva.docIds, dva.labels); DataSetIterator iter = new BaseDatasetIterator(1, 50, luceneDocFetcher); while (iter.hasNext()) { DataSet v = iter.next(); System.out.println(v.getFeatures()); } // test auto-encoding final int vocabSize = luceneDocFetcher.getDimension(); //int seed = Random.nextInt(vocabSize); int iterations = 2; int listenerFreq = iterations / 5; MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder() //.seed(seed) .iterations(iterations).optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) .list(2) .layer(0, new RBM.Builder().nIn(vocabSize).nOut(5) .lossFunction(LossFunctions.LossFunction.RMSE_XENT).build()) .layer(1, new RBM.Builder().nIn(5).nOut(10).lossFunction(LossFunctions.LossFunction.RMSE_XENT) .build()) //.pretrain(true) //.backprop(true) //.layer(2, new RBM.Builder().nIn(500).nOut(250).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build()) //.layer(3, new RBM.Builder().nIn(250).nOut(100).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build()) //.layer(4, new RBM.Builder().nIn(100).nOut(30).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build()) /* //encoding stops .layer(5, new RBM.Builder().nIn(30).nOut(100).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build()) //decoding starts .layer(6, new RBM.Builder().nIn(100).nOut(250).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build()) .layer(7, new RBM.Builder().nIn(250).nOut(500).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build()) .layer(8, new RBM.Builder().nIn(500).nOut(1000).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build()) .layer(9, new OutputLayer.Builder(LossFunctions.LossFunction.RMSE_XENT).nIn(1000).nOut(vocabSize).build()) .pretrain(true).backprop(true) */ .build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(Arrays.asList((IterationListener) new ScoreIterationListener(listenerFreq))); model.fit(iter); System.out.println("Output layer: "); iter.reset(); while (iter.hasNext()) { DataSet v = iter.next(); // System.out.println(model.output(v.getFeatures())); } //++Procheta iter.reset(); dva.saveModel(iter, prop.getProperty("output"), model);//*/ } catch (Exception ex) { ex.printStackTrace(); } }
From source file:examples.cnn.NetworkTrainer.java
License:Apache License
public void train(JavaRDD<DataSet> train, JavaRDD<DataSet> test) { int batchSize = 12 * cores; int lrCount = 0; double bestAccuracy = Double.MIN_VALUE; double learningRate = initialLearningRate; int trainCount = Long.valueOf(train.count()).intValue(); log.info("Number of training images {}", trainCount); log.info("Number of test images {}", test.count()); MultiLayerNetwork net = new MultiLayerNetwork( model.apply(learningRate, width, height, channels, numLabels)); net.init(); Map<Integer, Double> acc = new HashMap<>(); for (int i = 0; i < epochs; i++) { SparkDl4jMultiLayer sparkNetwork = networkToSparkNetwork.apply(net); final MultiLayerNetwork nn = sparkNetwork.fitDataSet(train, batchSize, trainCount, cores); log.info("Epoch {} completed", i); JavaPairRDD<Object, Object> predictionsAndLabels = test.mapToPair( ds -> new Tuple2<>(label(nn.output(ds.getFeatureMatrix(), false)), label(ds.getLabels()))); MulticlassMetrics metrics = new MulticlassMetrics(predictionsAndLabels.rdd()); double accuracy = 1.0 * predictionsAndLabels.filter(x -> x._1.equals(x._2)).count() / test.count(); log.info("Epoch {} accuracy {} ", i, accuracy); acc.put(i, accuracy);//from w w w.ja va2s . c o m predictionsAndLabels.take(10).forEach(t -> log.info("predicted {}, label {}", t._1, t._2)); log.info("confusionMatrix {}", metrics.confusionMatrix()); INDArray params = nn.params(); if (accuracy > bestAccuracy) { bestAccuracy = accuracy; try { ModelSerializer.writeModel(nn, new File(workingDir, Double.toString(accuracy)), false); } catch (IOException e) { log.error("Error writing trained model", e); } lrCount = 0; } else { if (++lrCount % stepDecayTreshold == 0) { learningRate *= learningRateDecayFactor; } if (lrCount >= resetLearningRateThreshold) { lrCount = 0; learningRate = initialLearningRate; } if (learningRate < minimumLearningRate) { lrCount = 0; learningRate = initialLearningRate; } if (bestAccuracy - accuracy > downgradeAccuracyThreshold) { params = ModelLoader.load(workingDir, bestAccuracy); } } net = new MultiLayerNetwork(model.apply(learningRate, width, height, channels, numLabels)); net.init(); net.setParameters(params); log.info("Learning rate {} for epoch {}", learningRate, i + 1); } log.info("Training completed"); }