* number of input values (determines size of input layer)
* @return neural network
*/
protected NeuralNet createNeuralNetwork(int numAttribs) {
NeuralNet nn = new NeuralNet();
List<Layer> nnLayers = new ArrayList<>();
LinearLayer inputLayer = new LinearLayer();
inputLayer.setRows(numAttribs);
nnLayers.add(inputLayer);
// Create network structure iteratively
Layer lastLayer = inputLayer;
for (int i = 0; i < hiddenLayers; i++) {
Layer currentLayer = NNLayer.newInstance(layer);
currentLayer.setRows(hiddenLayerRows);
Synapse currentSynapse = NNSynapse.newInstance(synapse);
lastLayer.addOutputSynapse(currentSynapse);
currentLayer.addInputSynapse(currentSynapse);
nnLayers.add(currentLayer);
lastLayer = currentLayer;
}
Synapse synapseToOutLayer = NNSynapse.newInstance(synapse);
lastLayer.addOutputSynapse(synapseToOutLayer);
LinearLayer outputLayer = new LinearLayer();
outputLayer.addInputSynapse(synapseToOutLayer);
outputLayer.setRows(1);
//Add Layers to neural network (doing it afterwards prevents Joone warnings)
nn.addLayer(nnLayers.remove(0), NeuralNet.INPUT_LAYER);
for (Layer hiddenLayer : nnLayers) {
nn.addLayer(hiddenLayer, NeuralNet.HIDDEN_LAYER);
}
nn.addLayer(outputLayer, NeuralNet.OUTPUT_LAYER);
return nn;
}