use of org.deeplearning4j.nn.conf.NeuralNetConfiguration in project deeplearning4j by deeplearning4j.
the class TestVAE method testPretrainSimple.
@Test
public void testPretrainSimple() {
int inputSize = 3;
MultiLayerConfiguration mlc = new NeuralNetConfiguration.Builder().list().layer(0, new org.deeplearning4j.nn.conf.layers.variational.VariationalAutoencoder.Builder().nIn(inputSize).nOut(4).encoderLayerSizes(5).decoderLayerSizes(6).build()).pretrain(true).backprop(false).build();
NeuralNetConfiguration c = mlc.getConf(0);
org.deeplearning4j.nn.conf.layers.variational.VariationalAutoencoder vae = (org.deeplearning4j.nn.conf.layers.variational.VariationalAutoencoder) c.getLayer();
int allParams = vae.initializer().numParams(c);
MultiLayerNetwork net = new MultiLayerNetwork(mlc);
net.init();
//TODO this should happen automatically
net.initGradientsView();
Map<String, INDArray> paramTable = net.getLayer(0).paramTable();
Map<String, INDArray> gradTable = ((org.deeplearning4j.nn.layers.variational.VariationalAutoencoder) net.getLayer(0)).getGradientViews();
assertEquals(paramTable.keySet(), gradTable.keySet());
for (String s : paramTable.keySet()) {
assertEquals(paramTable.get(s).length(), gradTable.get(s).length());
assertArrayEquals(paramTable.get(s).shape(), gradTable.get(s).shape());
}
System.out.println("Num params: " + net.numParams());
INDArray data = Nd4j.rand(1, inputSize);
net.fit(data);
}
use of org.deeplearning4j.nn.conf.NeuralNetConfiguration in project deeplearning4j by deeplearning4j.
the class GravesBidirectionalLSTMTest method testGravesBidirectionalLSTMForwardPassHelper.
@Test
public void testGravesBidirectionalLSTMForwardPassHelper() throws Exception {
//GravesBidirectionalLSTM.activateHelper() has different behaviour (due to optimizations) when forBackprop==true vs false
//But should otherwise provide identical activations
Nd4j.getRandom().setSeed(12345);
final int nIn = 10;
final int layerSize = 15;
final int miniBatchSize = 4;
final int timeSeriesLength = 7;
final NeuralNetConfiguration conf = new NeuralNetConfiguration.Builder().layer(new org.deeplearning4j.nn.conf.layers.GravesBidirectionalLSTM.Builder().nIn(nIn).nOut(layerSize).weightInit(WeightInit.DISTRIBUTION).dist(new UniformDistribution(0, 1)).activation(Activation.TANH).build()).build();
int numParams = conf.getLayer().initializer().numParams(conf);
INDArray params = Nd4j.create(1, numParams);
final GravesBidirectionalLSTM lstm = (GravesBidirectionalLSTM) conf.getLayer().instantiate(conf, null, 0, params, true);
final INDArray input = Nd4j.rand(new int[] { miniBatchSize, nIn, timeSeriesLength });
lstm.setInput(input);
final INDArray fwdPassFalse = LSTMHelpers.activateHelper(lstm, lstm.conf(), new ActivationSigmoid(), lstm.input(), lstm.getParam(GravesBidirectionalLSTMParamInitializer.RECURRENT_WEIGHT_KEY_FORWARDS), lstm.getParam(GravesBidirectionalLSTMParamInitializer.INPUT_WEIGHT_KEY_FORWARDS), lstm.getParam(GravesBidirectionalLSTMParamInitializer.BIAS_KEY_FORWARDS), false, null, null, false, true, GravesBidirectionalLSTMParamInitializer.INPUT_WEIGHT_KEY_FORWARDS, null).fwdPassOutput;
final INDArray[] fwdPassTrue = LSTMHelpers.activateHelper(lstm, lstm.conf(), new ActivationSigmoid(), lstm.input(), lstm.getParam(GravesBidirectionalLSTMParamInitializer.RECURRENT_WEIGHT_KEY_FORWARDS), lstm.getParam(GravesBidirectionalLSTMParamInitializer.INPUT_WEIGHT_KEY_FORWARDS), lstm.getParam(GravesBidirectionalLSTMParamInitializer.BIAS_KEY_FORWARDS), false, null, null, true, true, GravesBidirectionalLSTMParamInitializer.INPUT_WEIGHT_KEY_FORWARDS, null).fwdPassOutputAsArrays;
//I have no idea what the heck this does --Ben
for (int i = 0; i < timeSeriesLength; i++) {
final INDArray sliceFalse = fwdPassFalse.tensorAlongDimension(i, 1, 0);
final INDArray sliceTrue = fwdPassTrue[i];
assertTrue(sliceFalse.equals(sliceTrue));
}
}
use of org.deeplearning4j.nn.conf.NeuralNetConfiguration in project deeplearning4j by deeplearning4j.
the class GravesBidirectionalLSTMTest method testGetSetParmas.
@Test
public void testGetSetParmas() {
final int nIn = 2;
final int layerSize = 3;
final int miniBatchSize = 2;
final int timeSeriesLength = 10;
Nd4j.getRandom().setSeed(12345);
final NeuralNetConfiguration confBidirectional = new NeuralNetConfiguration.Builder().layer(new org.deeplearning4j.nn.conf.layers.GravesBidirectionalLSTM.Builder().nIn(nIn).nOut(layerSize).weightInit(WeightInit.DISTRIBUTION).dist(new UniformDistribution(-0.1, 0.1)).activation(Activation.TANH).build()).build();
int numParams = confBidirectional.getLayer().initializer().numParams(confBidirectional);
INDArray params = Nd4j.create(1, numParams);
final GravesBidirectionalLSTM bidirectionalLSTM = (GravesBidirectionalLSTM) confBidirectional.getLayer().instantiate(confBidirectional, null, 0, params, true);
final INDArray sig = Nd4j.rand(new int[] { miniBatchSize, nIn, timeSeriesLength });
final INDArray act1 = bidirectionalLSTM.activate(sig);
params = bidirectionalLSTM.params();
bidirectionalLSTM.setParams(params);
final INDArray act2 = bidirectionalLSTM.activate(sig);
assertArrayEquals(act2.data().asDouble(), act1.data().asDouble(), 1e-8);
}
use of org.deeplearning4j.nn.conf.NeuralNetConfiguration in project deeplearning4j by deeplearning4j.
the class GravesBidirectionalLSTMTest method testBidirectionalLSTMGravesForwardBasic.
@Test
public void testBidirectionalLSTMGravesForwardBasic() {
//Very basic test of forward prop. of LSTM layer with a time series.
//Essentially make sure it doesn't throw any exceptions, and provides output in the correct shape.
int nIn = 13;
int nHiddenUnits = 17;
final NeuralNetConfiguration conf = new NeuralNetConfiguration.Builder().layer(new org.deeplearning4j.nn.conf.layers.GravesBidirectionalLSTM.Builder().nIn(nIn).nOut(nHiddenUnits).activation(Activation.TANH).build()).build();
int numParams = conf.getLayer().initializer().numParams(conf);
INDArray params = Nd4j.create(1, numParams);
final GravesBidirectionalLSTM layer = (GravesBidirectionalLSTM) conf.getLayer().instantiate(conf, null, 0, params, true);
//Data: has shape [miniBatchSize,nIn,timeSeriesLength];
//Output/activations has shape [miniBatchsize,nHiddenUnits,timeSeriesLength];
final INDArray dataSingleExampleTimeLength1 = Nd4j.ones(1, nIn, 1);
final INDArray activations1 = layer.activate(dataSingleExampleTimeLength1);
assertArrayEquals(activations1.shape(), new int[] { 1, nHiddenUnits, 1 });
final INDArray dataMultiExampleLength1 = Nd4j.ones(10, nIn, 1);
final INDArray activations2 = layer.activate(dataMultiExampleLength1);
assertArrayEquals(activations2.shape(), new int[] { 10, nHiddenUnits, 1 });
final INDArray dataSingleExampleLength12 = Nd4j.ones(1, nIn, 12);
final INDArray activations3 = layer.activate(dataSingleExampleLength12);
assertArrayEquals(activations3.shape(), new int[] { 1, nHiddenUnits, 12 });
final INDArray dataMultiExampleLength15 = Nd4j.ones(10, nIn, 15);
final INDArray activations4 = layer.activate(dataMultiExampleLength15);
assertArrayEquals(activations4.shape(), new int[] { 10, nHiddenUnits, 15 });
}
use of org.deeplearning4j.nn.conf.NeuralNetConfiguration in project deeplearning4j by deeplearning4j.
the class GravesLSTMTest method testGravesBackwardBasicHelper.
private static void testGravesBackwardBasicHelper(int nIn, int nOut, int lstmNHiddenUnits, int miniBatchSize, int timeSeriesLength) {
INDArray inputData = Nd4j.ones(miniBatchSize, nIn, timeSeriesLength);
NeuralNetConfiguration conf = new NeuralNetConfiguration.Builder().layer(new org.deeplearning4j.nn.conf.layers.GravesLSTM.Builder().nIn(nIn).nOut(lstmNHiddenUnits).weightInit(WeightInit.DISTRIBUTION).dist(new UniformDistribution(0, 1)).activation(Activation.TANH).build()).build();
int numParams = conf.getLayer().initializer().numParams(conf);
INDArray params = Nd4j.create(1, numParams);
GravesLSTM lstm = (GravesLSTM) conf.getLayer().instantiate(conf, null, 0, params, true);
lstm.setBackpropGradientsViewArray(Nd4j.create(1, conf.getLayer().initializer().numParams(conf)));
//Set input, do a forward pass:
lstm.activate(inputData);
assertNotNull(lstm.input());
INDArray epsilon = Nd4j.ones(miniBatchSize, lstmNHiddenUnits, timeSeriesLength);
Pair<Gradient, INDArray> out = lstm.backpropGradient(epsilon);
Gradient outGradient = out.getFirst();
INDArray nextEpsilon = out.getSecond();
INDArray biasGradient = outGradient.getGradientFor(GravesLSTMParamInitializer.BIAS_KEY);
INDArray inWeightGradient = outGradient.getGradientFor(GravesLSTMParamInitializer.INPUT_WEIGHT_KEY);
INDArray recurrentWeightGradient = outGradient.getGradientFor(GravesLSTMParamInitializer.RECURRENT_WEIGHT_KEY);
assertNotNull(biasGradient);
assertNotNull(inWeightGradient);
assertNotNull(recurrentWeightGradient);
assertArrayEquals(biasGradient.shape(), new int[] { 1, 4 * lstmNHiddenUnits });
assertArrayEquals(inWeightGradient.shape(), new int[] { nIn, 4 * lstmNHiddenUnits });
assertArrayEquals(recurrentWeightGradient.shape(), new int[] { lstmNHiddenUnits, 4 * lstmNHiddenUnits + 3 });
assertNotNull(nextEpsilon);
assertArrayEquals(nextEpsilon.shape(), new int[] { miniBatchSize, nIn, timeSeriesLength });
//Check update:
for (String s : outGradient.gradientForVariable().keySet()) {
lstm.update(outGradient.getGradientFor(s), s);
}
}
Aggregations