Implementación de Backpropagation con librerias paralelizadas
- Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz 64 bits
- 8GB RAM
- Ubuntu 16.04
- Armadillo Pasos para instalar Esta libreria nos permite paralalelizar las operaciones
Se uso codeblocks con -std=c++11 e instalación previa de Armadillo y -lopenblas -llapack
Para la implementacion se usó diferentes clases:
- Neurona
neuron.cpp
neuron.h
- Capa
layer.cpp
layer.h
- Red
network.cpp
network.h
Para crear una red main.cpp
:
- Definir numero de neuronas en cada capa oculta:
vector<int> hidden; //Vector que incluye el numero de neuronas por capa oculta
hidden.push_back(8);hidden.push_back(6);
- Crear red definiendo el numero de capas totales, número de parametros de la entrada, capas ocultas,numero de clases para la capa salida.
Network * my_net = new Network(4,4,hidden,3); // 4 niveles(1 entrada, 2 hidden, 1 salida) ,entrada de 4 parametros, clases de salida
- Cargar data y normalizar
int Es=120;// cantidad train
my_net->loadDataFlowers("irisTraining.txt", Es, inputs, outputs);
my_net->normalize(IN, inputs);
- Realizar el forward y el backpropagation para cada una de las entradas
for(int i=0 ;i<Es; i++) //Iterar dentro del conjunto de entrenamiento
{
double t=0.00001;
my_net->init(IN[i],outputs[i], t);
//cout<<"entrada: "<< i << " **** era *** "<<era<<endl;
my_net->forward();
delta=my_net->sumSquareError();
//cout<<"SumsquareError de la capa:"<<delta<<endl;
if(delta>0.000001)
my_net->backpropagation();
//my_net->forward();
FinalErrors.push_back(delta);
era++;
}
Los experimentos se reralizarón con el Dataset de Iris, con 120 entradas para el Train y 30 para el Test
- Pesos despues del train y error obtenido
- Numero de aciertos el test