neuron_group.cpp

#include <iostream>
#include <cassert>
 
#include "neuron_group.h"
#include "neuron.h"
#include "connection.h"
 
 
NeuronGroup::NeuronGroup()
{
  index = -1;
 
  neurons.reserve(10);
}
 
 
NeuronGroup::NeuronGroup(unsigned int num_neurons)
{
  index = -1;
 
  neurons.reserve(num_neurons);
 
  for (unsigned int i = 0; i < num_neurons; i++)
  {
    pNeuronX tmp(new Neuron());
    tmp->setIndex(i);
    neurons.push_back(tmp);
  }
}
 
 
int NeuronGroup::getIndex(void)
{
  return index;
}
 
 
void NeuronGroup::setIndex(const int& index)
{
  this->index = index;
}
 
 
unsigned int NeuronGroup::getSize(void)
{
  return neurons.size();
}
 
 
void NeuronGroup::addNeuron(const pNeuronX& n)
{
  neurons.push_back(n);
}
 
 
void NeuronGroup::removeNeuron(const int& idx)
{
  assert(neurons.size() >= idx);
 
  for (unsigned i = neurons.size() - 1; i > 0; i--)
  {
    if (neurons[i]->getIndex() == idx)
    {
      neurons.erase(neurons.begin() + i);
      return;
    }
  }
}
 
 
pNeuronX &NeuronGroup::getNeuron(const int& idx)
{
  assert(neurons.size() >= idx);
 
  return neurons[idx];
}
 
 
void NeuronGroup::printOutput(void)
{
  std::cout << "Layer " << index << " has " << neurons.size() << " Neurons" << std::endl;
 
  for (unsigned int i = 0; i<neurons.size(); i++)
  {
    if (!neurons[i])
      continue;
 
    std::cout << "  Neuron[" << i << "] v=" << neurons[i]->getValue() << ", g=" << neurons[i]->getGradient() << std::endl;
 
    for (unsigned int j = 0; j<neurons[i]->getSizeOut(); j++)
    {
      pConnectionX& currentConnection = neurons[i]->getConnectionOut(j);
      if (!currentConnection)
        continue;
      currentConnection->printOutput();
    }
  }
}