-1

I'm trying to classify hotel image data using Convolutional neural network..

Below are some highlights:

  1. Image preprocessing:

    • converting to gray-scale
    • resizing all images to same resolution
    • normalizing image data
    • finding pca components
  2. Convolutional neural network:

    • Input- 32*32
    • convolution- 16 filters, 3*3 filter size
    • pooling- 2*2 filter size
    • dropout- dropping with 0.5 probability
    • fully connected- 256 units
    • dropout- dropping with 0.5 probability
    • output- 8 classes
  3. Libraries used:

    • Lasagne
    • nolearn

But, I'm getting less accuracy on test data which is around 28% only.

Any possible reason for such less accuracy? Any suggested improvement?

Thanks in advance.

Chetan
  • 1
  • 1
  • why is pca in your pipeline? how you even applied conv net on top of pca which returns a "flat" vector representation? – lejlot May 01 '16 at 11:48
  • You also seem to be working with one, specific architecture, why you assume that it is good enough? There are so many moving blocks in neural networks that coming up with a good architecture is a research question on its own. I suggest you start with some good architectures for cifar10, which are way more complex than this one (few layers, bigger pooling, more kernels etc.) – lejlot May 01 '16 at 11:55

2 Answers2

0

There are several possible reasons for low accuracy on test data, so without more information and a healthy amount of experimentation, it will be impossible to provide a concrete answer. Having said that, there are a few points worth mentioning:

  1. As @lejlot mentioned in the comments, the PCA pre-processing step is suspicious. The fundamental CNN architecture is designed to require minimal pre-processing, and it's crucial that the basic structure of the image remains intact. This is because CNNs need to be able to find useful, spatially-local features.
  2. For detecting complex objects from image data, it's likely that you'll benefit from more convolutional layers. Chances are, given the simple architecture you've described, that it simply doesn't possess the necessary expressiveness to handle the classification task.
  3. Also, you mention you apply dropout after the convolutional layer. In general, the research I've seen indicates that dropout is not particularly effective on convolutional layers. I personally would recommend removing it to see if it has any impact. If you do wind up needing regularization on your convolutional layers, (which in my experience is often unnecessary since the shared kernels often already act as a powerful regularizer), you might consider stochastic pooling.
  4. Among the most important tips I can give is to build a solid mechanism for measuring the quality of the model and then experiment. Try modifying the architecture and then tuning hyper-parameters to see what yields the best results. In particular, make sure to monitor training loss vs. validation loss so that you can identify when the model begins overfitting.
Aenimated1
  • 1,594
  • 1
  • 9
  • 10
0

After 2012 Imagenet, all convolutional neural networks which performs good(state of the art) are adding more convolutional neural network, they even use zero padding to increase the convolutional neural network.

  • Increase the number of convolutional neural network.

Some says that dropout is not that effective on CNN, however it is not bad to use, but

  • You should lower the dropout value, you should try it(May be 0.2).

Data should be analysed. If it is low,

  • You should use data augmentation techniques.

If you have more data in one of the labels,

  • You are stuck with the imbalanced data problem. But you should not consider it for now.

You can

  • Fine-Tune from VGG-Net or some other CNN's should be considered.

Also, don't convert to grayscale, after image-to-array transformation, you should just divide 225.

I think that you learned CNN from some tutorial(MNIST) and you think that you should turn it to grayscale.