List of usage examples for org.deeplearning4j.nn.conf NeuralNetConfiguration.ListBuilder layer
Layer layer
To view the source code for org.deeplearning4j.nn.conf NeuralNetConfiguration.ListBuilder layer.
Click Source Link
From source file:com.circle_technologies.cnn4j.predictive.provider.network.SimpleHiddenLayerNetworkProvider.java
License:Apache License
@Override public MultiLayerNetwork provideNetwork(int inputs, int outputs) { NeuralNetConfiguration.ListBuilder listBuilder = new NeuralNetConfiguration.Builder().iterations(1) .weightInit(WeightInit.XAVIER).activation(getActivationFunction()) .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).learningRate(getLearningRate()) .list().layer(0, new DenseLayer.Builder().nIn(inputs).nOut(inputs).activation("relu").build()); for (int i = 0; i < mHiddenLayerCount; i++) { listBuilder = listBuilder.layer(i + 1, new DenseLayer.Builder().nIn(inputs).nOut(inputs).activation(getActivationFunction()).build()); }// w w w .j av a 2 s . c o m MultiLayerConfiguration configuration = listBuilder .layer(mHiddenLayerCount + 1, new OutputLayer.Builder().nIn(inputs).nOut(outputs).build()) .backprop(true).pretrain(false).build(); return new MultiLayerNetwork(configuration); }
From source file:com.sliit.neuralnetwork.RecurrentNN.java
public void buildModel() { System.out.println("Build model...."); iterations = outputNum + 1;//from w w w . j av a2 s . c om NeuralNetConfiguration.Builder builder = new NeuralNetConfiguration.Builder(); builder.iterations(iterations); builder.learningRate(0.001); // builder.momentum(0.01); builder.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT); builder.seed(seed); builder.biasInit(1); builder.regularization(true).l2(1e-5); builder.updater(Updater.RMSPROP); builder.weightInit(WeightInit.XAVIER); NeuralNetConfiguration.ListBuilder list = builder.list(); for (int i = 0; i < HIDDEN_LAYER_COUNT; i++) { GravesLSTM.Builder hiddenLayerBuilder = new GravesLSTM.Builder(); hiddenLayerBuilder.nIn(i == 0 ? inputs : numHiddenNodes); hiddenLayerBuilder.nOut(numHiddenNodes); hiddenLayerBuilder.activation("tanh"); list.layer(i, hiddenLayerBuilder.build()); } RnnOutputLayer.Builder outputLayer = new RnnOutputLayer.Builder(LossFunction.MCXENT); outputLayer.activation("softmax"); outputLayer.nIn(numHiddenNodes); outputLayer.nOut(outputNum); list.layer(HIDDEN_LAYER_COUNT, outputLayer.build()); list.pretrain(false); list.backprop(true); MultiLayerConfiguration configuration = list.build(); model = new MultiLayerNetwork(configuration); model.init(); //model.setListeners(new ScoreIterationListener(1)); }
From source file:org.knime.ext.dl4j.base.mln.ConvMultiLayerNetFactory.java
License:Open Source License
@Override protected MultiLayerNetwork createMlnWithoutLearnerParameters(final List<Layer> layers) { final NeuralNetConfiguration.ListBuilder listBuilder = new NeuralNetConfiguration.Builder().list(); int currentLayerIndex = 0; for (final Layer layer : layers) { listBuilder.layer(currentLayerIndex, layer); currentLayerIndex++;//from w w w . j a v a 2 s .c o m } listBuilder.setInputType(InputType.convolutionalFlat(m_height, m_width, m_channels)); final MultiLayerConfiguration layerConf = listBuilder.build(); final MultiLayerNetwork mln = new MultiLayerNetwork(layerConf); mln.init(); return mln; }
From source file:org.knime.ext.dl4j.base.mln.ConvMultiLayerNetFactory2.java
License:Open Source License
@Override protected MultiLayerNetwork createMlnWithoutLearnerParameters(final List<Layer> layers) { final NeuralNetConfiguration.ListBuilder listBuilder = new NeuralNetConfiguration.Builder().list(); listBuilder.setInputType(InputType.convolutionalFlat(m_height, m_width, m_channels)); int currentLayerIndex = 0; for (final Layer layer : layers) { listBuilder.layer(currentLayerIndex, layer); currentLayerIndex++;/*from w ww . j a v a 2 s .c om*/ } final MultiLayerConfiguration layerConf = listBuilder.build(); final MultiLayerNetwork mln = new MultiLayerNetwork(layerConf); mln.init(); return mln; }
From source file:org.knime.ext.dl4j.base.mln.MultiLayerNetFactory.java
License:Open Source License
/** * Helper method for creating a new {@link MultiLayerNetwork} using only layers and no parameters, hence using DL4J * default parameters./* ww w . ja v a 2 s .c o m*/ * * @param layers * @return a network containing specified layers and default learner parameter */ protected MultiLayerNetwork createMlnWithoutLearnerParameters(final List<Layer> layers) { final org.deeplearning4j.nn.conf.NeuralNetConfiguration.ListBuilder listBuilder = new NeuralNetConfiguration.Builder() .list(); int currentLayerIndex = 0; for (final Layer layer : layers) { listBuilder.layer(currentLayerIndex, layer); currentLayerIndex++; } final MultiLayerConfiguration layerConf = listBuilder.build(); final MultiLayerNetwork mln = new MultiLayerNetwork(layerConf); mln.init(); return mln; }
From source file:org.knime.ext.dl4j.base.mln.MultiLayerNetFactory.java
License:Open Source License
/** * Creates a {@link org.deeplearning4j.nn.conf.NeuralNetConfiguration.ListBuilder} using specified list of layers * and parameter values from members. Need to make sure that the <code>init()</code> methods was called before * calling this method if other values, than the default values, for the network parameters should be used. * * @param layers the layers which should be used to create the network * @return builder with set layers and parameters *//*from w w w.ja va 2 s . com*/ protected NeuralNetConfiguration.ListBuilder createListBuilderWithLearnerParameters(final List<Layer> layers) { final NeuralNetConfiguration.Builder nnConfigBuilder = new NeuralNetConfiguration.Builder(); /* * Need to overwrite global parameters for each layer separately as setting the parameter * in the NeuralNetConfiguration does not overwrite it when it was already set in the * specific layer. Hence, need to clone layers to not alter original layers. */ final List<Layer> layersCopy = DLModelPortObjectUtils.cloneLayers(layers); if (m_useGlobalDropOut) { overwriteDropOut(layersCopy, m_dropOut); nnConfigBuilder.dropOut(m_dropOut); } if (m_useGlobalWeightInit) { overwriteWeightInit(layersCopy, m_weightInit); nnConfigBuilder.weightInit(m_weightInit); if (m_weightInit.equals(ParameterUtils.DISTRIBUTION_PARAMETER_CONDITION)) { Distribution dist; switch (m_distribution) { case BINOMIAL: dist = new BinomialDistribution(m_distributionBinomialTrails, m_distributionBinomialProbability); break; case NORMAL: dist = new NormalDistribution(m_distributionMean, m_distributionSTD); break; case UNIFORM: dist = new UniformDistribution(m_distributionLowerBound, m_distributionUpperBound); break; default: throw new IllegalArgumentException("No case defined for DL4JDistribution: " + m_distribution); } nnConfigBuilder.dist(dist); } } if (m_useGlobalLearningRate) { overwriteLearningRate(layersCopy, m_learningRate); } //setup number of input and output neurons ConfigurationUtils.setupLayers(layersCopy, m_nIn); if (m_useSeed) { nnConfigBuilder.seed(m_seed); } if (m_useGradientNormalization) { nnConfigBuilder.gradientNormalization(m_gradientNormalization); nnConfigBuilder.gradientNormalizationThreshold(m_gradientNormalizationThreshold); } if (m_useRegularization) { nnConfigBuilder.regularization(true); nnConfigBuilder.l1(m_l1); nnConfigBuilder.l2(m_l2); } // momentum moved to updaters, will only be used with NESTEROVS // if (m_useMomentum) { // nnConfigBuilder.momentum(m_momentum); // nnConfigBuilder.momentumAfter(m_momentumAfter); // } if (m_useDropConnect) { nnConfigBuilder.useDropConnect(true); } // the learning rate policy behaves strange, need to revise conditions if we want to add it // if (m_useAdvancedLearningRate) { // nnConfigBuilder.learningRateDecayPolicy(m_lrPolicy); // nnConfigBuilder.lrPolicyDecayRate(m_lrPolicyDecayRate); // if (m_lrPolicy.equals(ParameterUtils.LR_POWER_PARAMETER_CONDITION)) { // nnConfigBuilder.lrPolicyPower(m_lrPolicyPower); // } else if (m_lrPolicy.equals(ParameterUtils.LR_SCHEDULE_PARAMETER_CONDITION)) { // nnConfigBuilder.learningRateSchedule(m_learningRateAfter); // } else if (m_lrPolicy.equals(ParameterUtils.LR_SCORE_BASED_PARAMETER_CONDITION)) { // nnConfigBuilder.learningRateScoreBasedDecayRate(m_lrPolicyScoreDecayRate); // } else if (m_lrPolicy.equals(ParameterUtils.LR_STEPS_PARAMETER_CONDITION)) { // nnConfigBuilder.lrPolicySteps(m_lrPolicySteps); // } else if (m_lrPolicy.equals(ParameterUtils.LR_EXPONENTIAL_PARAMETER_CONDITION)) { // //no extra param // } // } if (m_useBiasInit) { nnConfigBuilder.biasInit(m_biasInit); } if (m_useBiasLearningRate) { overwriteBiasLearningRate(layersCopy, m_biasLearningRate); } nnConfigBuilder.iterations(m_iterations); nnConfigBuilder.updater(m_updater); if (m_updater.equals(ParameterUtils.ADAM_PARAMETER_CONDITION)) { nnConfigBuilder.adamMeanDecay(m_adamMeanDecay); nnConfigBuilder.adamVarDecay(m_adamVarDecay); } else if (m_updater.equals(ParameterUtils.ADADELTA_PARAMETER_CONDITION)) { nnConfigBuilder.rho(m_adadeltaRho); } else if (m_updater.equals(ParameterUtils.RMSPROP_PARAMETER_CONDITION)) { nnConfigBuilder.rmsDecay(m_rmsDecay); } else if (m_updater.equals(ParameterUtils.NESTEROVS_PARAMETER_CONDITION)) { nnConfigBuilder.momentum(m_momentum); nnConfigBuilder.momentumAfter(m_momentumAfter); } //The new dialogs have a use updater checkbox which is not present in the old dialogs and is true by default. Therefore, //we overwrite the updater with the default values, if the checkbox is not checked. For the old dialog this will not happen //as the value is true by default. if (!m_useUpdater) { nnConfigBuilder.updater(Updater.valueOf(LearnerParameter.DEFAULT_UPDATER)); nnConfigBuilder.momentum(LearnerParameter.DEFAULT_MOMENTUM); } nnConfigBuilder.optimizationAlgo(m_optimization); if (ParameterUtils.MAX_LINE_SEARCH_ITERATIONS_CONDITION.contains(m_optimization)) { nnConfigBuilder.maxNumLineSearchIterations(m_maxNumLineSearchIterations); } //very strange dl4j behaviour, for unsupervised layers (RBM, Autoencoder) we need //to modify the step function elswise learning does not work (error does not decrease) //nnConfigBuilder.stepFunction(new DefaultStepFunction()); final NeuralNetConfiguration.ListBuilder listBuilder = nnConfigBuilder.list(); int currentLayerIndex = 0; for (final Layer layer : layersCopy) { listBuilder.layer(currentLayerIndex, layer); currentLayerIndex++; } listBuilder.pretrain(m_usePretrain); listBuilder.backprop(m_useBackprop); return listBuilder; }
From source file:org.knime.ext.dl4j.base.mln.MultiLayerNetFactory2.java
License:Open Source License
/** * Creates a {@link org.deeplearning4j.nn.conf.NeuralNetConfiguration.ListBuilder} using specified list of layers * and parameter./* w w w. jav a2s . c o m*/ * * @param layers the layers which should be used to create the network * @param lp * @return builder with set layers and parameters */ protected NeuralNetConfiguration.ListBuilder createListBuilderWithLearnerParameters(final List<Layer> layers, final LearnerParameterSettingsModels2 lp) { //boolean boolean m_useGlobalDropOut = lp.getBoolean(LearnerParameter.USE_GLOBAL_DROP_OUT, LearnerParameter.DEFAULT_BOOLEAN); boolean m_useGlobalWeightInit = lp.getBoolean(LearnerParameter.USE_GLOBAL_WEIGHT_INIT, LearnerParameter.DEFAULT_BOOLEAN); boolean m_useGlobalLearningRate = lp.getBoolean(LearnerParameter.USE_GLOBAL_LEARNING_RATE, LearnerParameter.DEFAULT_BOOLEAN); boolean m_useDropConnect = lp.getBoolean(LearnerParameter.USE_DROP_CONNECT, LearnerParameter.DEFAULT_BOOLEAN); boolean m_useBackprop = lp.getBoolean(LearnerParameter.USE_BACKPROP, LearnerParameter.DEFAULT_BOOLEAN); boolean m_useSeed = lp.getBoolean(LearnerParameter.USE_SEED, LearnerParameter.DEFAULT_BOOLEAN); boolean m_useGradientNormalization = lp.getBoolean(LearnerParameter.USE_GRADIENT_NORMALIZATION, LearnerParameter.DEFAULT_BOOLEAN); boolean m_useRegularization = lp.getBoolean(LearnerParameter.USE_REGULARIZATION, LearnerParameter.DEFAULT_BOOLEAN); boolean m_useBiasInit = lp.getBoolean(LearnerParameter.USE_BIAS_INIT, LearnerParameter.DEFAULT_BOOLEAN); boolean m_useBiasLearningRate = lp.getBoolean(LearnerParameter.USE_BIAS_LEARNING_RATE, LearnerParameter.DEFAULT_BOOLEAN); boolean m_useUpdater = lp.getBoolean(LearnerParameter.USE_UPDATER, LearnerParameter.DEFAULT_USE_UPDATER); boolean m_usePretrain = lp.getBoolean(LearnerParameter.USE_PRETRAIN, LearnerParameter.DEFAULT_BOOLEAN); //double double m_dropOut = lp.getDouble(LearnerParameter.GLOBAL_DROP_OUT, LearnerParameter.DEFAULT_DOUBLE); double m_distributionBinomialProbability = lp.getDouble(LearnerParameter.DISTRIBUTION_BINOMIAL_PROBABILITY, LearnerParameter.DEFAULT_DOUBLE); double m_distributionMean = lp.getDouble(LearnerParameter.DISTRIBUTION_MEAN, LearnerParameter.DEFAULT_DOUBLE); double m_distributionSTD = lp.getDouble(LearnerParameter.DISTRIBUTION_STD, LearnerParameter.DEFAULT_DOUBLE); double m_distributionLowerBound = lp.getDouble(LearnerParameter.DISTRIBUTION_LOWER_BOUND, LearnerParameter.DEFAULT_DOUBLE); double m_distributionUpperBound = lp.getDouble(LearnerParameter.DISTRIBUTION_UPPER_BOUND, LearnerParameter.DEFAULT_DOUBLE); double m_learningRate = lp.getDouble(LearnerParameter.GLOBAL_LEARNING_RATE, LearnerParameter.DEFAULT_LEARNING_RATE); double m_gradientNormalizationThreshold = lp.getDouble(LearnerParameter.GRADIENT_NORMALIZATION_THRESHOLD, LearnerParameter.DEFAULT_GRADIENT_NORMALIZATION_THRESHOLD); double m_l1 = lp.getDouble(LearnerParameter.L1, LearnerParameter.DEFAULT_DOUBLE); double m_l2 = lp.getDouble(LearnerParameter.L2, LearnerParameter.DEFAULT_DOUBLE); double m_biasInit = lp.getDouble(LearnerParameter.BIAS_INIT, LearnerParameter.DEFAULT_DOUBLE); double m_biasLearningRate = lp.getDouble(LearnerParameter.BIAS_LEARNING_RATE, LearnerParameter.DEFAULT_DOUBLE); double m_adamMeanDecay = lp.getDouble(LearnerParameter.ADAM_MEAN_DECAY, LearnerParameter.DEFAULT_ADAM_MEAN_DECAY); double m_adamVarDecay = lp.getDouble(LearnerParameter.ADAM_VAR_DECAY, LearnerParameter.DEFAULT_ADAM_VAR_DECAY); double m_adadeltaRho = lp.getDouble(LearnerParameter.ADADELTA_RHO, LearnerParameter.DEFAULT_ADADELTA_RHO); double m_rmsDecay = lp.getDouble(LearnerParameter.RMS_DECAY, LearnerParameter.DEFAULT_RMS_DECAY); double m_momentum = lp.getDouble(LearnerParameter.MOMENTUM, LearnerParameter.DEFAULT_MOMENTUM); //int Integer m_distributionBinomialTrails = lp.getInteger(LearnerParameter.DISTRIBUTION_BINOMIAL_TRAILS, LearnerParameter.DEFAULT_INT); Integer m_seed = lp.getInteger(LearnerParameter.SEED, LearnerParameter.DEFAULT_INT); Integer m_iterations = lp.getInteger(LearnerParameter.TRAINING_ITERATIONS, LearnerParameter.DEFAULT_INT); Integer m_maxNumLineSearchIterations = lp.getInteger(LearnerParameter.MAX_NUMBER_LINE_SEARCH_ITERATIONS, LearnerParameter.DEFAULT_INT); //string WeightInit m_weightInit = WeightInit .valueOf(lp.getString(LearnerParameter.GLOBAL_WEIGHT_INIT, LearnerParameter.DEFAULT_WEIGHT_INIT)); DL4JDistribution m_distribution = DL4JDistribution .valueOf(lp.getString(LearnerParameter.DISTRIBUTION, LearnerParameter.DEFAULT_DISTRIBUTION)); GradientNormalization m_gradientNormalization = DL4JGradientNormalization .fromToString(lp.getString(LearnerParameter.GRADIENT_NORMALIZATION, LearnerParameter.DEFAULT_GRADIENT_NORMALIZATION)) .getDL4JValue(); Updater m_updater = Updater .valueOf(lp.getString(LearnerParameter.UPDATER, LearnerParameter.DEFAULT_UPDATER)); Map<Integer, Double> m_momentumAfter = ParameterUtils .convertStringToMap(lp.getString(LearnerParameter.MOMENTUM_AFTER, LearnerParameter.DEFAULT_MAP)); OptimizationAlgorithm m_optimization = DL4JOptimizationAlgorithm.fromToString( lp.getString(LearnerParameter.OPTIMIZATION_ALGORITHM, LearnerParameter.DEFAULT_OPTIMIZATION)) .getDL4JValue(); final NeuralNetConfiguration.Builder nnConfigBuilder = new NeuralNetConfiguration.Builder(); /* * Since 0.9.1: Use DL4J workspaces which makes training faster and we can reduce the number of GC calls of DL4J. * For now use WorkspaceMode.SEPARATE for both training and inference. */ nnConfigBuilder.inferenceWorkspaceMode(WorkspaceMode.SEPARATE); nnConfigBuilder.trainingWorkspaceMode(WorkspaceMode.SEPARATE); /* * Need to overwrite global parameters for each layer separately as setting the parameter * in the NeuralNetConfiguration does not overwrite it when it was already set in the * specific layer. Hence, need to clone layers to not alter original layers. */ final List<Layer> layersCopy = DLModelPortObjectUtils.cloneLayers(layers); if (m_useGlobalDropOut) { overwriteDropOut(layersCopy, m_dropOut); nnConfigBuilder.dropOut(m_dropOut); } if (m_useGlobalWeightInit) { overwriteWeightInit(layersCopy, m_weightInit); nnConfigBuilder.weightInit(m_weightInit); if (m_weightInit.equals(ParameterUtils.DISTRIBUTION_PARAMETER_CONDITION)) { Distribution dist; switch (m_distribution) { case BINOMIAL: dist = new BinomialDistribution(m_distributionBinomialTrails, m_distributionBinomialProbability); break; case NORMAL: dist = new NormalDistribution(m_distributionMean, m_distributionSTD); break; case UNIFORM: dist = new UniformDistribution(m_distributionLowerBound, m_distributionUpperBound); break; default: throw new IllegalArgumentException("No case defined for DL4JDistribution: " + m_distribution); } nnConfigBuilder.dist(dist); } } if (m_useGlobalLearningRate) { overwriteLearningRate(layersCopy, m_learningRate); } //setup number of input and output neurons //ConfigurationUtils.setupLayers(layersCopy, m_nIn); //substituted with 'setInputType(InputType.feedForward(m_nIn)' if (m_useSeed) { nnConfigBuilder.seed(m_seed); } if (m_useGradientNormalization) { nnConfigBuilder.gradientNormalization(m_gradientNormalization); nnConfigBuilder.gradientNormalizationThreshold(m_gradientNormalizationThreshold); } if (m_useRegularization) { nnConfigBuilder.regularization(true); nnConfigBuilder.l1(m_l1); nnConfigBuilder.l2(m_l2); } // momentum moved to updaters, will only be used with NESTEROVS // if (m_useMomentum) { // nnConfigBuilder.momentum(m_momentum); // nnConfigBuilder.momentumAfter(m_momentumAfter); // } if (m_useDropConnect) { nnConfigBuilder.useDropConnect(true); } // the learning rate policy behaves strange, need to revise conditions if we want to add it // if (m_useAdvancedLearningRate) { // nnConfigBuilder.learningRateDecayPolicy(m_lrPolicy); // nnConfigBuilder.lrPolicyDecayRate(m_lrPolicyDecayRate); // if (m_lrPolicy.equals(ParameterUtils.LR_POWER_PARAMETER_CONDITION)) { // nnConfigBuilder.lrPolicyPower(m_lrPolicyPower); // } else if (m_lrPolicy.equals(ParameterUtils.LR_SCHEDULE_PARAMETER_CONDITION)) { // nnConfigBuilder.learningRateSchedule(m_learningRateAfter); // } else if (m_lrPolicy.equals(ParameterUtils.LR_SCORE_BASED_PARAMETER_CONDITION)) { // nnConfigBuilder.learningRateScoreBasedDecayRate(m_lrPolicyScoreDecayRate); // } else if (m_lrPolicy.equals(ParameterUtils.LR_STEPS_PARAMETER_CONDITION)) { // nnConfigBuilder.lrPolicySteps(m_lrPolicySteps); // } else if (m_lrPolicy.equals(ParameterUtils.LR_EXPONENTIAL_PARAMETER_CONDITION)) { // //no extra param // } // } if (m_useBiasInit) { nnConfigBuilder.biasInit(m_biasInit); } if (m_useBiasLearningRate) { overwriteBiasLearningRate(layersCopy, m_biasLearningRate); } nnConfigBuilder.iterations(m_iterations); nnConfigBuilder.updater(m_updater); if (m_updater.equals(ParameterUtils.ADAM_PARAMETER_CONDITION)) { nnConfigBuilder.adamMeanDecay(m_adamMeanDecay); nnConfigBuilder.adamVarDecay(m_adamVarDecay); } else if (m_updater.equals(ParameterUtils.ADADELTA_PARAMETER_CONDITION)) { nnConfigBuilder.rho(m_adadeltaRho); } else if (m_updater.equals(ParameterUtils.RMSPROP_PARAMETER_CONDITION)) { nnConfigBuilder.rmsDecay(m_rmsDecay); } else if (m_updater.equals(ParameterUtils.NESTEROVS_PARAMETER_CONDITION)) { nnConfigBuilder.momentum(m_momentum); nnConfigBuilder.momentumAfter(m_momentumAfter); } //The new dialogs have a use updater checkbox which is not present in the old dialogs and is true by default. Therefore, //we overwrite the updater with the default values, if the checkbox is not checked. For the old dialog this will not happen //as the value is true by default. if (!m_useUpdater) { nnConfigBuilder.updater(Updater.valueOf(LearnerParameter.DEFAULT_UPDATER)); nnConfigBuilder.momentum(LearnerParameter.DEFAULT_MOMENTUM); } nnConfigBuilder.optimizationAlgo(m_optimization); if (ParameterUtils.MAX_LINE_SEARCH_ITERATIONS_CONDITION.contains(m_optimization)) { nnConfigBuilder.maxNumLineSearchIterations(m_maxNumLineSearchIterations); } //very strange dl4j behaviour, for unsupervised layers (RBM, Autoencoder) we need //to modify the step function elswise learning does not work (error does not decrease) //nnConfigBuilder.stepFunction(new DefaultStepFunction()); final NeuralNetConfiguration.ListBuilder listBuilder = nnConfigBuilder.list(); int currentLayerIndex = 0; for (final Layer layer : layersCopy) { listBuilder.layer(currentLayerIndex, layer); currentLayerIndex++; } listBuilder.pretrain(m_usePretrain); listBuilder.backprop(m_useBackprop); //infer correct number of inputs and outputs for each layer by using the number of inputs of the first layer //and the number of outputs for the following ones listBuilder.setInputType(InputType.feedForward(m_nIn)); return listBuilder; }
From source file:org.wso2.carbon.ml.rest.api.neuralNetworks.FeedForwardNetwork.java
License:Open Source License
/** * method to createFeedForwardNetwork.// ww w . j ava2 s. com * @param seed * @param learningRate * @param analysisID * @param bachSize * @param backprop * @param hiddenList * @param inputLayerNodes * @param iterations * @param versionID * @param momentum * @param nepoches * @param datasetId * @param noHiddenLayers * @param optimizationAlgorithms * @param outputList * @param pretrain * @param updater * @return an String object with evaluation result. */ public String createFeedForwardNetwork(long seed, double learningRate, int bachSize, double nepoches, int iterations, String optimizationAlgorithms, String updater, double momentum, boolean pretrain, boolean backprop, int noHiddenLayers, int inputLayerNodes, int datasetId, int versionID, int analysisID, List<HiddenLayerDetails> hiddenList, List<OutputLayerDetails> outputList) throws IOException, InterruptedException { String evaluationDetails = null; int numLinesToSkip = 0; String delimiter = ","; mlDataSet = getDatasetPath(datasetId, versionID); analysisFraction = getAnalysisFraction(analysisID); analysisResponceVariable = getAnalysisResponseVariable(analysisID); responseIndex = getAnalysisResponseVariableIndex(analysisID); SplitTestAndTrain splitTestAndTrain; DataSet currentDataset; DataSet trainingSet = null; DataSet testingSet = null; INDArray features = null; INDArray labels = null; INDArray predicted = null; Random rnd = new Random(); int labelIndex = 0; int numClasses = 0; int fraction = 0; //Initialize RecordReader RecordReader rr = new CSVRecordReader(numLinesToSkip, delimiter); //read the dataset rr.initialize(new FileSplit(new File(mlDataSet))); labelIndex = responseIndex; numClasses = outputList.get(0).outputNodes; //Get the fraction to do the spliting data to training and testing FileReader fr = new FileReader(mlDataSet); LineNumberReader lineNumberReader = new LineNumberReader(fr); //Get the total number of lines lineNumberReader.skip(Long.MAX_VALUE); int lines = lineNumberReader.getLineNumber(); //handling multiplication of 0 error if (analysisFraction == 0) { return null; } //Take floor value to set the numHold of training data fraction = ((int) Math.floor(lines * analysisFraction)); org.nd4j.linalg.dataset.api.iterator.DataSetIterator trainIter = new RecordReaderDataSetIterator(rr, lines, labelIndex, numClasses); //Create NeuralNetConfiguration object having basic settings. NeuralNetConfiguration.ListBuilder neuralNetConfiguration = new NeuralNetConfiguration.Builder().seed(seed) .iterations(iterations).optimizationAlgo(mapOptimizationAlgorithm(optimizationAlgorithms)) .learningRate(learningRate).updater(mapUpdater(updater)).momentum(momentum) .list(noHiddenLayers + 1); //Add Hidden Layers to the network with unique settings for (int i = 0; i < noHiddenLayers; i++) { int nInput = 0; if (i == 0) nInput = inputLayerNodes; else nInput = hiddenList.get(i - 1).hiddenNodes; neuralNetConfiguration.layer(i, new DenseLayer.Builder().nIn(nInput).nOut(hiddenList.get(i).hiddenNodes) .weightInit(mapWeightInit(hiddenList.get(i).weightInit)) .activation(hiddenList.get(i).activationAlgo).build()); } //Add Output Layers to the network with unique settings neuralNetConfiguration.layer(noHiddenLayers, new OutputLayer.Builder(mapLossFunction(outputList.get(0).lossFunction)) .nIn(hiddenList.get(noHiddenLayers - 1).hiddenNodes).nOut(outputList.get(0).outputNodes) .weightInit(mapWeightInit(outputList.get(0).weightInit)) .activation(outputList.get(0).activationAlgo).build()); //Create MultiLayerConfiguration network MultiLayerConfiguration conf = neuralNetConfiguration.pretrain(pretrain).backprop(backprop).build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(Collections.singletonList((IterationListener) new ScoreIterationListener(1))); while (trainIter.hasNext()) { currentDataset = trainIter.next(); splitTestAndTrain = currentDataset.splitTestAndTrain(fraction, rnd); trainingSet = splitTestAndTrain.getTrain(); testingSet = splitTestAndTrain.getTest(); features = testingSet.getFeatureMatrix(); labels = testingSet.getLabels(); } //Train the model with the training data for (int n = 0; n < nepoches; n++) { model.fit(trainingSet); } //Do the evaluations of the model including the Accuracy, F1 score etc. log.info("Evaluate model...."); Evaluation eval = new Evaluation(outputList.get(0).outputNodes); predicted = model.output(features, false); eval.eval(labels, predicted); evaluationDetails = "{\"Accuracy\":\"" + eval.accuracy() + "\", \"Pecision\":\"" + eval.precision() + "\",\"Recall\":\"" + eval.recall() + "\",\"F1Score\":\"" + eval.f1() + "\"}"; return evaluationDetails; }