|
Java example source code file (ManualTests.java)
The ManualTests.java Java example source codepackage org.deeplearning4j.ui; import org.canova.api.util.ClassPathResource; import org.canova.image.loader.LFWLoader; import org.nd4j.linalg.dataset.api.iterator.DataSetIterator; import org.deeplearning4j.datasets.iterator.impl.LFWDataSetIterator; import org.deeplearning4j.datasets.iterator.impl.MnistDataSetIterator; import org.deeplearning4j.eval.Evaluation; import org.deeplearning4j.models.embeddings.reader.impl.BasicModelUtils; import org.deeplearning4j.models.word2vec.VocabWord; import org.deeplearning4j.models.word2vec.Word2Vec; import org.deeplearning4j.nn.api.OptimizationAlgorithm; import org.deeplearning4j.nn.conf.GradientNormalization; import org.deeplearning4j.nn.conf.MultiLayerConfiguration; import org.deeplearning4j.nn.conf.NeuralNetConfiguration; import org.deeplearning4j.nn.conf.Updater; import org.deeplearning4j.nn.conf.layers.*; import org.deeplearning4j.nn.conf.layers.setup.ConvolutionLayerSetup; import org.deeplearning4j.nn.multilayer.MultiLayerNetwork; import org.deeplearning4j.nn.weights.WeightInit; import org.deeplearning4j.optimize.api.IterationListener; import org.deeplearning4j.optimize.listeners.ScoreIterationListener; import org.deeplearning4j.text.sentenceiterator.BasicLineIterator; import org.deeplearning4j.text.sentenceiterator.SentenceIterator; import org.deeplearning4j.text.tokenization.tokenizer.preprocessor.CommonPreprocessor; import org.deeplearning4j.text.tokenization.tokenizerfactory.DefaultTokenizerFactory; import org.deeplearning4j.text.tokenization.tokenizerfactory.TokenizerFactory; import org.deeplearning4j.ui.activation.UpdateActivationIterationListener; import org.deeplearning4j.ui.flow.FlowIterationListener; import org.deeplearning4j.ui.weights.HistogramIterationListener; import org.deeplearning4j.ui.weights.ConvolutionalIterationListener; import org.junit.Ignore; import org.junit.Test; import org.nd4j.linalg.api.ndarray.INDArray; import org.nd4j.linalg.dataset.DataSet; import org.nd4j.linalg.dataset.SplitTestAndTrain; import org.nd4j.linalg.factory.Nd4j; import org.nd4j.linalg.lossfunctions.LossFunctions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.*; /** * Test environment for building/debugging UI. * * Please, do NOT remove @Ignore annotation * * @author raver119@gmail.com */ @Ignore public class ManualTests { private static Logger log = LoggerFactory.getLogger(ManualTests.class); @Test public void testLaunch() throws Exception { UiServer server = UiServer.getInstance(); System.out.println("http://localhost:" + server.getPort()+ "/"); Thread.sleep(10000000000L); new ScoreIterationListener(100); } @Test public void testHistograms() throws Exception { final int numRows = 28; final int numColumns = 28; int outputNum = 10; int numSamples = 60000; int batchSize = 100; int iterations = 10; int seed = 123; int listenerFreq = batchSize / 5; log.info("Load data...."); DataSetIterator iter = new MnistDataSetIterator(batchSize,numSamples,true); log.info("Build model...."); MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder() .seed(seed) .gradientNormalization(GradientNormalization.ClipElementWiseAbsoluteValue) .gradientNormalizationThreshold(1.0) .iterations(iterations) .momentum(0.5) .momentumAfter(Collections.singletonMap(3, 0.9)) .optimizationAlgo(OptimizationAlgorithm.CONJUGATE_GRADIENT) .list() .layer(0, new RBM.Builder().nIn(numRows*numColumns).nOut(500) .weightInit(WeightInit.XAVIER).lossFunction(LossFunctions.LossFunction.RMSE_XENT) .visibleUnit(RBM.VisibleUnit.BINARY) .hiddenUnit(RBM.HiddenUnit.BINARY) .build()) .layer(1, new RBM.Builder().nIn(500).nOut(250) .weightInit(WeightInit.XAVIER).lossFunction(LossFunctions.LossFunction.RMSE_XENT) .visibleUnit(RBM.VisibleUnit.BINARY) .hiddenUnit(RBM.HiddenUnit.BINARY) .build()) .layer(2, new RBM.Builder().nIn(250).nOut(200) .weightInit(WeightInit.XAVIER).lossFunction(LossFunctions.LossFunction.RMSE_XENT) .visibleUnit(RBM.VisibleUnit.BINARY) .hiddenUnit(RBM.HiddenUnit.BINARY) .build()) .layer(3, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD).activation("softmax") .nIn(200).nOut(outputNum).build()) .pretrain(true).backprop(false) .build(); ; UiServer server = UiServer.getInstance(); UiConnectionInfo connectionInfo = server.getConnectionInfo(); connectionInfo.setSessionId("my session here"); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(Arrays.asList((IterationListener) new ScoreIterationListener(listenerFreq),(IterationListener) new HistogramIterationListener(connectionInfo, listenerFreq), new FlowIterationListener(connectionInfo, listenerFreq))); log.info("Train model...."); model.fit(iter); // achieves end to end pre-training log.info("Evaluate model...."); Evaluation eval = new Evaluation(outputNum); DataSetIterator testIter = new MnistDataSetIterator(100,10000); while(testIter.hasNext()) { DataSet testMnist = testIter.next(); INDArray predict2 = model.output(testMnist.getFeatureMatrix()); eval.eval(testMnist.getLabels(), predict2); } log.info(eval.stats()); log.info("****************Example finished********************"); } @Test public void testRenderWeights() throws Exception { final int numRows = 28; final int numColumns = 28; int outputNum = 10; int numSamples = 60000; int batchSize = 100; int iterations = 10; int seed = 123; int listenerFreq = batchSize / 5; log.info("Load data...."); DataSetIterator iter = new MnistDataSetIterator(batchSize,numSamples,true); log.info("Build model...."); MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder() .seed(seed) .gradientNormalization(GradientNormalization.ClipElementWiseAbsoluteValue) .gradientNormalizationThreshold(1.0) .iterations(iterations) .momentum(0.5) .momentumAfter(Collections.singletonMap(3, 0.9)) .optimizationAlgo(OptimizationAlgorithm.CONJUGATE_GRADIENT) .list() .layer(0, new RBM.Builder().nIn(numRows*numColumns).nOut(500) .weightInit(WeightInit.XAVIER).lossFunction(LossFunctions.LossFunction.RMSE_XENT) .visibleUnit(RBM.VisibleUnit.BINARY) .hiddenUnit(RBM.HiddenUnit.BINARY) .build()) .layer(1, new RBM.Builder().nIn(500).nOut(250) .weightInit(WeightInit.XAVIER).lossFunction(LossFunctions.LossFunction.RMSE_XENT) .visibleUnit(RBM.VisibleUnit.BINARY) .hiddenUnit(RBM.HiddenUnit.BINARY) .build()) .layer(2, new RBM.Builder().nIn(250).nOut(200) .weightInit(WeightInit.XAVIER).lossFunction(LossFunctions.LossFunction.RMSE_XENT) .visibleUnit(RBM.VisibleUnit.BINARY) .hiddenUnit(RBM.HiddenUnit.BINARY) .build()) .layer(3, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD).activation("softmax") .nIn(200).nOut(outputNum).build()) .pretrain(true).backprop(false) .build(); ; MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(Arrays.asList((IterationListener) new ScoreIterationListener(listenerFreq),(IterationListener) new UpdateActivationIterationListener(listenerFreq))); log.info("Train model...."); model.fit(iter); // achieves end to end pre-training log.info("Evaluate model...."); Evaluation eval = new Evaluation(outputNum); DataSetIterator testIter = new MnistDataSetIterator(100,10000); while(testIter.hasNext()) { DataSet testMnist = testIter.next(); INDArray predict2 = model.output(testMnist.getFeatureMatrix()); eval.eval(testMnist.getLabels(), predict2); } log.info(eval.stats()); log.info("****************Example finished********************"); } /** * This test is for manual execution only, since it's here just to get working CNN and visualize it's layers * * @throws Exception */ @Test public void testCNNActivationsVisualization() throws Exception { final int numRows = 40; final int numColumns = 40; int nChannels = 3; int outputNum = LFWLoader.NUM_LABELS; int numSamples = LFWLoader.NUM_IMAGES; boolean useSubset = false; int batchSize = 200;// numSamples/10; int iterations = 5; int splitTrainNum = (int) (batchSize*.8); int seed = 123; int listenerFreq = iterations/5; DataSet lfwNext; SplitTestAndTrain trainTest; DataSet trainInput; List<INDArray> testInput = new ArrayList<>(); List<INDArray> testLabels = new ArrayList<>(); log.info("Load data...."); DataSetIterator lfw = new LFWDataSetIterator(batchSize, numSamples, new int[] {numRows, numColumns, nChannels}, outputNum, useSubset, true, 1.0, new Random(seed)); log.info("Build model...."); MultiLayerConfiguration.Builder builder = new NeuralNetConfiguration.Builder() .seed(seed) .iterations(iterations) .activation("relu") .weightInit(WeightInit.XAVIER) .gradientNormalization(GradientNormalization.RenormalizeL2PerLayer) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) .learningRate(0.01) .momentum(0.9) .regularization(true) .updater(Updater.ADAGRAD) .useDropConnect(true) .list() .layer(0, new ConvolutionLayer.Builder(4, 4) .name("cnn1") .nIn(nChannels) .stride(1, 1) .nOut(20) .build()) .layer(1, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[]{2, 2}) .name("pool1") .build()) .layer(2, new ConvolutionLayer.Builder(3, 3) .name("cnn2") .stride(1,1) .nOut(40) .build()) .layer(3, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[]{2, 2}) .name("pool2") .build()) .layer(4, new ConvolutionLayer.Builder(3, 3) .name("cnn3") .stride(1,1) .nOut(60) .build()) .layer(5, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[]{2, 2}) .name("pool3") .build()) .layer(6, new ConvolutionLayer.Builder(2, 2) .name("cnn3") .stride(1,1) .nOut(80) .build()) .layer(7, new DenseLayer.Builder() .name("ffn1") .nOut(160) .dropOut(0.5) .build()) .layer(8, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD) .nOut(outputNum) .activation("softmax") .build()) .backprop(true).pretrain(false); new ConvolutionLayerSetup(builder,numRows,numColumns,nChannels); MultiLayerNetwork model = new MultiLayerNetwork(builder.build()); model.init(); log.info("Train model...."); model.setListeners(Arrays.asList(new ScoreIterationListener(listenerFreq), new ConvolutionalIterationListener(listenerFreq))); while(lfw.hasNext()) { lfwNext = lfw.next(); lfwNext.scale(); trainTest = lfwNext.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(lfw.getLabels()); for(int i = 0; i < testInput.size(); i++) { INDArray output = model.output(testInput.get(i)); eval.eval(testLabels.get(i), output); } INDArray output = model.output(testInput.get(0)); eval.eval(testLabels.get(0), output); log.info(eval.stats()); log.info("****************Example finished********************"); } @Test public void testFlowActivationsMLN1() throws Exception { final int numRows = 40; final int numColumns = 40; int nChannels = 3; int outputNum = LFWLoader.NUM_LABELS; int numSamples = LFWLoader.NUM_IMAGES; boolean useSubset = false; int batchSize = 200;// numSamples/10; int iterations = 5; int splitTrainNum = (int) (batchSize*.8); int seed = 123; int listenerFreq = iterations/5; DataSet lfwNext; SplitTestAndTrain trainTest; DataSet trainInput; List<INDArray> testInput = new ArrayList<>(); List<INDArray> testLabels = new ArrayList<>(); log.info("Load data...."); DataSetIterator lfw = new LFWDataSetIterator(batchSize, numSamples, new int[] {numRows, numColumns, nChannels}, outputNum, useSubset, true, 1.0, new Random(seed)); log.info("Build model...."); MultiLayerConfiguration.Builder builder = new NeuralNetConfiguration.Builder() .seed(seed) .iterations(iterations) .activation("relu") .weightInit(WeightInit.XAVIER) .gradientNormalization(GradientNormalization.RenormalizeL2PerLayer) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) .learningRate(0.01) .momentum(0.9) .regularization(true) .updater(Updater.ADAGRAD) .useDropConnect(true) .list() .layer(0, new ConvolutionLayer.Builder(4, 4) .name("cnn1") .nIn(nChannels) .stride(1, 1) .nOut(20) .build()) .layer(1, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[]{2, 2}) .name("pool1") .build()) .layer(2, new ConvolutionLayer.Builder(3, 3) .name("cnn2") .stride(1,1) .nOut(40) .build()) .layer(3, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[]{2, 2}) .name("pool2") .build()) .layer(4, new ConvolutionLayer.Builder(3, 3) .name("cnn3") .stride(1,1) .nOut(60) .build()) .layer(5, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[]{2, 2}) .name("pool3") .build()) .layer(6, new ConvolutionLayer.Builder(2, 2) .name("cnn3") .stride(1,1) .nOut(80) .build()) .layer(7, new DenseLayer.Builder() .name("ffn1") .nOut(160) .dropOut(0.5) .build()) .layer(8, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD) .nOut(outputNum) .activation("softmax") .build()) .backprop(true).pretrain(false); new ConvolutionLayerSetup(builder,numRows,numColumns,nChannels); MultiLayerNetwork model = new MultiLayerNetwork(builder.build()); model.init(); log.info("Train model...."); model.setListeners(Arrays.asList(new ScoreIterationListener(listenerFreq), new FlowIterationListener(listenerFreq))); while(lfw.hasNext()) { lfwNext = lfw.next(); lfwNext.scale(); trainTest = lfwNext.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(lfw.getLabels()); for(int i = 0; i < testInput.size(); i++) { INDArray output = model.output(testInput.get(i)); eval.eval(testLabels.get(i), output); } INDArray output = model.output(testInput.get(0)); eval.eval(testLabels.get(0), output); log.info(eval.stats()); log.info("****************Example finished********************"); } @Test public void testFlowActivationsCG1() throws Exception { } @Test public void testWord2VecPlot() throws Exception { File inputFile = new ClassPathResource("/big/raw_sentences.txt").getFile(); SentenceIterator iter = new BasicLineIterator(inputFile.getAbsolutePath()); TokenizerFactory t = new DefaultTokenizerFactory(); t.setTokenPreProcessor(new CommonPreprocessor()); Word2Vec vec = new Word2Vec.Builder() .minWordFrequency(5) .iterations(2) .batchSize(1000) .learningRate(0.025) .layerSize(100) .seed(42) .sampling(0) .negativeSample(0) .windowSize(5) .modelUtils(new BasicModelUtils<VocabWord>()) .useAdaGrad(false) .iterate(iter) .workers(10) .tokenizerFactory(t) .build(); vec.fit(); UiConnectionInfo connectionInfo = UiServer.getInstance().getConnectionInfo(); vec.getLookupTable().plotVocab(100, connectionInfo); Thread.sleep(10000000000L); } @Test public void testImage() throws Exception { INDArray array = Nd4j.create(11,13); for (int i = 0; i < array.rows(); i++) { array.putRow(i, Nd4j.create(new double[]{0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.2f, 1.3f})); } writeImage(array, new File("test.png")); } private void writeImage(INDArray array, File file) { // BufferedImage image = ImageLoader.toImage(array); log.info("Array.rank(): " + array.rank()); log.info("Size(-1): " + array.size(-1)); log.info("Size(-2): " + array.size(-2)); BufferedImage imageToRender = new BufferedImage(array.columns(),array.rows(),BufferedImage.TYPE_BYTE_GRAY); for( int x = 0; x < array.columns(); x++ ){ for (int y = 0; y < array.rows(); y++ ) { log.info("x: " + (x) + " y: " + y); imageToRender.getRaster().setSample(x, y, 0, (int) (255 * array.getRow(y).getDouble(x))); } } try { ImageIO.write(imageToRender, "png", file); } catch (IOException e) { e.printStackTrace(); } } } Other Java examples (source code examples)Here is a short list of links related to this Java ManualTests.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.