I'm attempting to create a Neural Network to use as a rain model to generate representative precipitation levels for a given location.
The problem I'm facing is that the network always converges to the average amount of rain. For example, the trained network predicts that it will be constantly raining a small amount all the time, instead of predicting that at some times it will be raining and sometimes it won't.
Convergence on average through training: (green - actual, blue - predicted)
Is it reasonable to expect a neural network to be able to predict like this? If so, what can be done to allow the network to learn in this way?
(I'm using DL4J, one hidden layer with 5 nodes, squared loss function, month and hour as inputs (normalised))
MultiLayerConfiguration modelConfiguration = new NeuralNetConfiguration.Builder()
.seed(seed)
.iterations(1)
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
.learningRate(0.0001)
.updater(Updater.NESTEROVS)
.list()
.layer(0, new DenseLayer.Builder()
.nIn(4)
.nOut(5)
.weightInit(WeightInit.XAVIER)
.activation(Activation.LEAKYRELU)
.build())
.layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.SQUARED_LOSS)
.weightInit(WeightInit.XAVIER)
.activation(Activation.IDENTITY)
.nIn(5)
.nOut(1)
.build())
.pretrain(false)
.backprop(true)
.build();