Example #1
0
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;
}