0

I've been trying to run the example code provided by DL4J for the stacked denoising autoencoder. However, my results have been really bad:

Warning: class 0 was never predicted by the model. This class was excluded    from the average precision
Warning: class 1 was never predicted by the model. This class was excluded from the average precision
Warning: class 2 was never predicted by the model. This class was excluded from the average precision
Warning: class 3 was never predicted by the model. This class was excluded from the average precision
Warning: class 4 was never predicted by the model. This class was excluded from the average precision
Warning: class 5 was never predicted by the model. This class was excluded from the average precision
Warning: class 6 was never predicted by the model. This class was excluded from the average precision
Warning: class 7 was never predicted by the model. This class was excluded from the average precision
Warning: class 9 was never predicted by the model. This class was excluded from the average precision

==========================Scores========================================
 Accuracy:  0.0944
 Precision: 0.0944
 Recall:    0.1
 F1 Score:  0.0971

I'm not exactly sure what could be causing the results to be that bad. I'm using the MNIST dataset, and the code for the stacked denoising autoencoder was provided by DL4J. My code is below:

/**
 * Created by chris on 1/31/16.
 * Import statements above
 */
public class stackedDenoisingAutoencoderExample {

    private static Logger log = LoggerFactory.getLogger(stackedDenoisingAutoencoderExample.class);

    public static void main(String[] args) 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(4)
            .layer(0, new AutoEncoder.Builder().nIn(numRows * numColumns).nOut(500)
                    .weightInit(WeightInit.XAVIER).lossFunction(LossFunctions.LossFunction.RMSE_XENT)
                    .corruptionLevel(0.3)
                    .build())
            .layer(1, new AutoEncoder.Builder().nIn(500).nOut(250)
                    .weightInit(WeightInit.XAVIER).lossFunction(LossFunctions.LossFunction.RMSE_XENT)
                    .corruptionLevel(0.3)

                    .build())
            .layer(2, new AutoEncoder.Builder().nIn(250).nOut(200)
                    .weightInit(WeightInit.XAVIER).lossFunction(LossFunctions.LossFunction.RMSE_XENT)
                    .corruptionLevel(0.3)
                    .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)));

        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********************");

    }
}

Thanks!

1 Answers1

0

Since you appear to be newer to neural nets, I'd look at CNNs: https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/convolution/LenetMnistExample.java

Community
  • 1
  • 1
Adam Gibson
  • 3,055
  • 1
  • 10
  • 12