How to reduce over-fitting on training set? Currently I'm feeding spectrogram of audio to the CNN with 3 convolution.

Each convolution is followed by a max pool of filter size 2.

First -> 5x5x4

Second - > 5x5x8

Third - > 5x5x16

and final layer is a fully connected with 512 unit.

But while training with dropout of 0.25, getting train accuracy of 0.97 with 150 iterations.
and on test data accuracy is just 0.60.

Tell me how to improve the results.

Yes both train and test data come from same distribution.
The problem of overfitting is given that your model is being too flexible with the training data. The approaches you could take will be:


Download pretrained models (VGG-16) and use transfer learning.
Increase the value of your dropout (e.g. from 0.25 to 0.50).
Use data augmentation for your images.
Reduce the number of fully connected layers.