use of org.deeplearning4j.spark.impl.paramavg.ParameterAveragingTrainingMaster in project deeplearning4j by deeplearning4j.
the class TestCustomLayer method testSparkWithCustomLayer.
@Test
public void testSparkWithCustomLayer() {
//Basic test - checks whether exceptions etc are thrown with custom layers + spark
//Custom layers are tested more extensively in dl4j core
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().learningRate(0.1).list().layer(0, new DenseLayer.Builder().nIn(10).nOut(10).build()).layer(1, new CustomLayer(3.14159)).layer(2, new OutputLayer.Builder(LossFunctions.LossFunction.MCXENT).nIn(10).nOut(10).build()).pretrain(false).backprop(true).build();
ParameterAveragingTrainingMaster tm = new ParameterAveragingTrainingMaster.Builder(1).averagingFrequency(2).batchSizePerWorker(5).saveUpdater(true).workerPrefetchNumBatches(0).build();
SparkDl4jMultiLayer net = new SparkDl4jMultiLayer(sc, conf, tm);
List<DataSet> testData = new ArrayList<>();
Random r = new Random(12345);
for (int i = 0; i < 200; i++) {
INDArray f = Nd4j.rand(1, 10);
INDArray l = Nd4j.zeros(1, 10);
l.putScalar(0, r.nextInt(10), 1.0);
testData.add(new DataSet(f, l));
}
JavaRDD<DataSet> rdd = sc.parallelize(testData);
net.fit(rdd);
}
use of org.deeplearning4j.spark.impl.paramavg.ParameterAveragingTrainingMaster in project deeplearning4j by deeplearning4j.
the class TestSparkComputationGraph method testDistributedScoring.
@Test
public void testDistributedScoring() {
ComputationGraphConfiguration conf = new NeuralNetConfiguration.Builder().regularization(true).l1(0.1).l2(0.1).seed(123).updater(Updater.NESTEROVS).learningRate(0.1).momentum(0.9).graphBuilder().addInputs("in").addLayer("0", new org.deeplearning4j.nn.conf.layers.DenseLayer.Builder().nIn(nIn).nOut(3).activation(Activation.TANH).build(), "in").addLayer("1", new org.deeplearning4j.nn.conf.layers.OutputLayer.Builder(LossFunctions.LossFunction.MCXENT).nIn(3).nOut(nOut).activation(Activation.SOFTMAX).build(), "0").setOutputs("1").backprop(true).pretrain(false).build();
TrainingMaster tm = new ParameterAveragingTrainingMaster(true, numExecutors(), 1, 10, 1, 0);
SparkComputationGraph sparkNet = new SparkComputationGraph(sc, conf, tm);
ComputationGraph netCopy = sparkNet.getNetwork().clone();
int nRows = 100;
INDArray features = Nd4j.rand(nRows, nIn);
INDArray labels = Nd4j.zeros(nRows, nOut);
Random r = new Random(12345);
for (int i = 0; i < nRows; i++) {
labels.putScalar(new int[] { i, r.nextInt(nOut) }, 1.0);
}
INDArray localScoresWithReg = netCopy.scoreExamples(new DataSet(features, labels), true);
INDArray localScoresNoReg = netCopy.scoreExamples(new DataSet(features, labels), false);
List<Tuple2<String, DataSet>> dataWithKeys = new ArrayList<>();
for (int i = 0; i < nRows; i++) {
DataSet ds = new DataSet(features.getRow(i).dup(), labels.getRow(i).dup());
dataWithKeys.add(new Tuple2<>(String.valueOf(i), ds));
}
JavaPairRDD<String, DataSet> dataWithKeysRdd = sc.parallelizePairs(dataWithKeys);
JavaPairRDD<String, Double> sparkScoresWithReg = sparkNet.scoreExamples(dataWithKeysRdd, true, 4);
JavaPairRDD<String, Double> sparkScoresNoReg = sparkNet.scoreExamples(dataWithKeysRdd, false, 4);
Map<String, Double> sparkScoresWithRegMap = sparkScoresWithReg.collectAsMap();
Map<String, Double> sparkScoresNoRegMap = sparkScoresNoReg.collectAsMap();
for (int i = 0; i < nRows; i++) {
double scoreRegExp = localScoresWithReg.getDouble(i);
double scoreRegAct = sparkScoresWithRegMap.get(String.valueOf(i));
assertEquals(scoreRegExp, scoreRegAct, 1e-5);
double scoreNoRegExp = localScoresNoReg.getDouble(i);
double scoreNoRegAct = sparkScoresNoRegMap.get(String.valueOf(i));
assertEquals(scoreNoRegExp, scoreNoRegAct, 1e-5);
// System.out.println(scoreRegExp + "\t" + scoreRegAct + "\t" + scoreNoRegExp + "\t" + scoreNoRegAct);
}
List<DataSet> dataNoKeys = new ArrayList<>();
for (int i = 0; i < nRows; i++) {
dataNoKeys.add(new DataSet(features.getRow(i).dup(), labels.getRow(i).dup()));
}
JavaRDD<DataSet> dataNoKeysRdd = sc.parallelize(dataNoKeys);
List<Double> scoresWithReg = new ArrayList<>(sparkNet.scoreExamples(dataNoKeysRdd, true, 4).collect());
List<Double> scoresNoReg = new ArrayList<>(sparkNet.scoreExamples(dataNoKeysRdd, false, 4).collect());
Collections.sort(scoresWithReg);
Collections.sort(scoresNoReg);
double[] localScoresWithRegDouble = localScoresWithReg.data().asDouble();
double[] localScoresNoRegDouble = localScoresNoReg.data().asDouble();
Arrays.sort(localScoresWithRegDouble);
Arrays.sort(localScoresNoRegDouble);
for (int i = 0; i < localScoresWithRegDouble.length; i++) {
assertEquals(localScoresWithRegDouble[i], scoresWithReg.get(i), 1e-5);
assertEquals(localScoresNoRegDouble[i], scoresNoReg.get(i), 1e-5);
// System.out.println(localScoresWithRegDouble[i] + "\t" + scoresWithReg.get(i) + "\t" + localScoresNoRegDouble[i] + "\t" + scoresNoReg.get(i));
}
}
use of org.deeplearning4j.spark.impl.paramavg.ParameterAveragingTrainingMaster in project deeplearning4j by deeplearning4j.
the class TestEarlyStoppingSpark method testListeners.
@Test
public void testListeners() {
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1).updater(Updater.SGD).weightInit(WeightInit.XAVIER).list().layer(0, new OutputLayer.Builder().nIn(4).nOut(3).lossFunction(LossFunctions.LossFunction.MCXENT).build()).pretrain(false).backprop(true).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.setListeners(new ScoreIterationListener(1));
JavaRDD<DataSet> irisData = getIris();
EarlyStoppingModelSaver<MultiLayerNetwork> saver = new InMemoryModelSaver<>();
EarlyStoppingConfiguration<MultiLayerNetwork> esConf = new EarlyStoppingConfiguration.Builder<MultiLayerNetwork>().epochTerminationConditions(new MaxEpochsTerminationCondition(5)).iterationTerminationConditions(new MaxTimeIterationTerminationCondition(1, TimeUnit.MINUTES)).scoreCalculator(new SparkDataSetLossCalculator(irisData, true, sc.sc())).modelSaver(saver).build();
LoggingEarlyStoppingListener listener = new LoggingEarlyStoppingListener();
IEarlyStoppingTrainer<MultiLayerNetwork> trainer = new SparkEarlyStoppingTrainer(getContext().sc(), new ParameterAveragingTrainingMaster(true, Runtime.getRuntime().availableProcessors(), 1, 10, 1, 0), esConf, net, irisData);
trainer.setListener(listener);
trainer.fit();
assertEquals(1, listener.onStartCallCount);
assertEquals(5, listener.onEpochCallCount);
assertEquals(1, listener.onCompletionCallCount);
}
Aggregations