void EssexWriter::write(NeuralNetwork &nn,ostream &os) { // Process layers nn.setIndices(); nn.findLayers(); const int numNeurons=nn.getNumNeurons(); Array1D<int> layers(numNeurons); computeLayers(nn,layers); int outputLayer=0; for(int i=0 ; i<numNeurons ; ++i) if(layers[i]>outputLayer) outputLayer=layers[i]; // Generate output os<<"(network\n"; for(int i=0 ; i<numNeurons ; ++i) { Neuron &neuron=nn[i]; const int layer=layers[i]; bool isInput=layer==0, isOutput=layer==outputLayer; os<<" (neuron "<<i<<" (layer "<<layers[i]<<")"; if(isInput) { os<<")"<<endl; continue; } os<<" (transfer sigmoid)"; if(isOutput) os<<" (output)"; os<<" (value "<<neuron.getActivationValue()<<")"; const int inDeg=neuron.getInDegree(); if(inDeg>0) os<<endl; for(int j=0 ; j<inDeg ; ++j) { Synapse &synapse=neuron.getInput(j); const int from=synapse.getFrom(); const float weight=synapse.getWeight(); os<<" (input (from "<<from<<") (weight "<<weight<<"))"; if(j+1<inDeg) os<<endl; } os<<")"; if(i+1<numNeurons) os<<endl; } os<<")\n"<<endl; }