use of org.deeplearning4j.nn.conf.MultiLayerConfiguration in project deeplearning4j by deeplearning4j.
the class GravesLSTMTest method testSingleExample.
@Test
public void testSingleExample() {
Nd4j.getRandom().setSeed(12345);
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1).updater(Updater.SGD).learningRate(0.1).seed(12345).list().layer(0, new org.deeplearning4j.nn.conf.layers.GravesLSTM.Builder().activation(Activation.TANH).nIn(2).nOut(2).build()).layer(1, new org.deeplearning4j.nn.conf.layers.RnnOutputLayer.Builder().lossFunction(LossFunctions.LossFunction.MSE).nIn(2).nOut(1).activation(Activation.TANH).build()).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
INDArray in1 = Nd4j.rand(new int[] { 1, 2, 4 });
INDArray in2 = Nd4j.rand(new int[] { 1, 2, 5 });
in2.put(new INDArrayIndex[] { NDArrayIndex.all(), NDArrayIndex.all(), NDArrayIndex.interval(0, 4) }, in1);
assertEquals(in1, in2.get(NDArrayIndex.all(), NDArrayIndex.all(), NDArrayIndex.interval(0, 4)));
INDArray labels1 = Nd4j.rand(new int[] { 1, 1, 4 });
INDArray labels2 = Nd4j.create(1, 1, 5);
labels2.put(new INDArrayIndex[] { NDArrayIndex.all(), NDArrayIndex.all(), NDArrayIndex.interval(0, 4) }, labels1);
assertEquals(labels1, labels2.get(NDArrayIndex.all(), NDArrayIndex.all(), NDArrayIndex.interval(0, 4)));
INDArray out1 = net.output(in1);
INDArray out2 = net.output(in2);
System.out.println(Arrays.toString(net.output(in1).data().asFloat()));
System.out.println(Arrays.toString(net.output(in2).data().asFloat()));
List<INDArray> activations1 = net.feedForward(in1);
List<INDArray> activations2 = net.feedForward(in2);
for (int i = 0; i < 3; i++) {
System.out.println("-----\n" + i);
System.out.println(Arrays.toString(activations1.get(i).dup().data().asDouble()));
System.out.println(Arrays.toString(activations2.get(i).dup().data().asDouble()));
System.out.println(activations1.get(i));
System.out.println(activations2.get(i));
}
//Expect first 4 time steps to be indentical...
for (int i = 0; i < 4; i++) {
double d1 = out1.getDouble(i);
double d2 = out2.getDouble(i);
assertEquals(d1, d2, 0.0);
}
}
use of org.deeplearning4j.nn.conf.MultiLayerConfiguration in project deeplearning4j by deeplearning4j.
the class GravesLSTMTest method testGateActivationFnsSanityCheck.
@Test
public void testGateActivationFnsSanityCheck() {
for (String gateAfn : new String[] { "sigmoid", "hardsigmoid" }) {
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1).seed(12345).list().layer(0, new org.deeplearning4j.nn.conf.layers.GravesLSTM.Builder().gateActivationFunction(gateAfn).activation(Activation.TANH).nIn(2).nOut(2).build()).layer(1, new org.deeplearning4j.nn.conf.layers.RnnOutputLayer.Builder().lossFunction(LossFunctions.LossFunction.MSE).nIn(2).nOut(2).activation(Activation.TANH).build()).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
assertEquals(gateAfn, ((org.deeplearning4j.nn.conf.layers.GravesLSTM) net.getLayer(0).conf().getLayer()).getGateActivationFn().toString());
INDArray in = Nd4j.rand(new int[] { 3, 2, 5 });
INDArray labels = Nd4j.rand(new int[] { 3, 2, 5 });
net.fit(in, labels);
}
}
use of org.deeplearning4j.nn.conf.MultiLayerConfiguration in project deeplearning4j by deeplearning4j.
the class BatchNormalizationTest method checkMeanVarianceEstimateCNN.
@Test
public void checkMeanVarianceEstimateCNN() throws Exception {
Nd4j.getRandom().setSeed(12345);
//Check that the internal global mean/variance estimate is approximately correct
//First, Mnist data as 2d input (NOT taking into account convolution property)
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1).updater(Updater.RMSPROP).seed(12345).list().layer(0, new BatchNormalization.Builder().nIn(3).nOut(3).eps(1e-5).decay(0.95).build()).layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.MSE).weightInit(WeightInit.XAVIER).activation(Activation.IDENTITY).nOut(10).build()).backprop(true).pretrain(false).setInputType(InputType.convolutional(5, 5, 3)).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
int minibatch = 32;
List<DataSet> list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
list.add(new DataSet(Nd4j.rand(new int[] { minibatch, 3, 5, 5 }), Nd4j.rand(minibatch, 10)));
}
DataSetIterator iter = new ListDataSetIterator(list);
INDArray expMean = Nd4j.valueArrayOf(new int[] { 1, 3 }, 0.5);
//Expected variance of U(0,1) distribution: 1/12 * (1-0)^2 = 0.0833
INDArray expVar = Nd4j.valueArrayOf(new int[] { 1, 3 }, 1 / 12.0);
for (int i = 0; i < 10; i++) {
iter.reset();
net.fit(iter);
}
INDArray estMean = net.getLayer(0).getParam(BatchNormalizationParamInitializer.GLOBAL_MEAN);
INDArray estVar = net.getLayer(0).getParam(BatchNormalizationParamInitializer.GLOBAL_VAR);
float[] fMeanExp = expMean.data().asFloat();
float[] fMeanAct = estMean.data().asFloat();
float[] fVarExp = expVar.data().asFloat();
float[] fVarAct = estVar.data().asFloat();
// System.out.println("Mean vs. estimated mean:");
// System.out.println(Arrays.toString(fMeanExp));
// System.out.println(Arrays.toString(fMeanAct));
//
// System.out.println("Var vs. estimated var:");
// System.out.println(Arrays.toString(fVarExp));
// System.out.println(Arrays.toString(fVarAct));
assertArrayEquals(fMeanExp, fMeanAct, 0.01f);
assertArrayEquals(fVarExp, fVarAct, 0.01f);
}
use of org.deeplearning4j.nn.conf.MultiLayerConfiguration in project deeplearning4j by deeplearning4j.
the class BatchNormalizationTest method checkSerialization.
@Test
public void checkSerialization() throws Exception {
//Serialize the batch norm network (after training), and make sure we get same activations out as before
// i.e., make sure state is properly stored
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(2).seed(12345).list().layer(0, new ConvolutionLayer.Builder().nIn(1).nOut(6).weightInit(WeightInit.XAVIER).activation(Activation.IDENTITY).build()).layer(1, new BatchNormalization.Builder().build()).layer(2, new ActivationLayer.Builder().activation(Activation.LEAKYRELU).build()).layer(3, new DenseLayer.Builder().nOut(10).activation(Activation.LEAKYRELU).build()).layer(4, new BatchNormalization.Builder().build()).layer(5, new OutputLayer.Builder(LossFunctions.LossFunction.MCXENT).weightInit(WeightInit.XAVIER).activation(Activation.SOFTMAX).nOut(10).build()).backprop(true).pretrain(false).setInputType(InputType.convolutionalFlat(28, 28, 1)).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
DataSetIterator iter = new MnistDataSetIterator(16, true, 12345);
for (int i = 0; i < 20; i++) {
net.fit(iter.next());
}
INDArray in = iter.next().getFeatureMatrix();
INDArray out = net.output(in, false);
INDArray out2 = net.output(in, false);
assertEquals(out, out2);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ModelSerializer.writeModel(net, baos, true);
baos.close();
byte[] bArr = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(bArr);
MultiLayerNetwork net2 = ModelSerializer.restoreMultiLayerNetwork(bais, true);
INDArray outDeser = net2.output(in, false);
assertEquals(out, outDeser);
}
use of org.deeplearning4j.nn.conf.MultiLayerConfiguration in project deeplearning4j by deeplearning4j.
the class BatchNormalizationTest method checkMeanVarianceEstimate.
@Test
public void checkMeanVarianceEstimate() throws Exception {
Nd4j.getRandom().setSeed(12345);
//Check that the internal global mean/variance estimate is approximately correct
//First, Mnist data as 2d input (NOT taking into account convolution property)
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1).updater(Updater.RMSPROP).seed(12345).list().layer(0, new BatchNormalization.Builder().nIn(10).nOut(10).eps(1e-5).decay(0.95).build()).layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.MSE).weightInit(WeightInit.XAVIER).activation(Activation.IDENTITY).nIn(10).nOut(10).build()).backprop(true).pretrain(false).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
int minibatch = 32;
List<DataSet> list = new ArrayList<>();
for (int i = 0; i < 200; i++) {
list.add(new DataSet(Nd4j.rand(minibatch, 10), Nd4j.rand(minibatch, 10)));
}
DataSetIterator iter = new ListDataSetIterator(list);
INDArray expMean = Nd4j.valueArrayOf(new int[] { 1, 10 }, 0.5);
//Expected variance of U(0,1) distribution: 1/12 * (1-0)^2 = 0.0833
INDArray expVar = Nd4j.valueArrayOf(new int[] { 1, 10 }, 1 / 12.0);
for (int i = 0; i < 10; i++) {
iter.reset();
net.fit(iter);
}
INDArray estMean = net.getLayer(0).getParam(BatchNormalizationParamInitializer.GLOBAL_MEAN);
INDArray estVar = net.getLayer(0).getParam(BatchNormalizationParamInitializer.GLOBAL_VAR);
float[] fMeanExp = expMean.data().asFloat();
float[] fMeanAct = estMean.data().asFloat();
float[] fVarExp = expVar.data().asFloat();
float[] fVarAct = estVar.data().asFloat();
// System.out.println("Mean vs. estimated mean:");
// System.out.println(Arrays.toString(fMeanExp));
// System.out.println(Arrays.toString(fMeanAct));
//
// System.out.println("Var vs. estimated var:");
// System.out.println(Arrays.toString(fVarExp));
// System.out.println(Arrays.toString(fVarAct));
assertArrayEquals(fMeanExp, fMeanAct, 0.02f);
assertArrayEquals(fVarExp, fVarAct, 0.02f);
}
Aggregations