Step by Step python
Por: Evandro.2016 • 7/11/2018 • 2.063 Palavras (9 Páginas) • 320 Visualizações
...
for (j =0; j < NR_NEURON_O; j++)
w_o_o[i][j] = gera_nr_aleatorios();
// Inicializa pesos sinapticos da camada oculta para a saida
for (i = 0; i < NR_NEURON_O+1; i++)
for (j =0; j < SAIDAS; j++)
w_o_s[i][j] = gera_nr_aleatorios();
}
int gera_nr_aleatorios()
{
int numeros[2] = {-1, 1};
// Retorna -1 ou 1
return (numeros[rand() % 2]);
}
void mostrar_sinapses()
{
int i, j;
// Inicializa pesos sinapticos da entrada para a camada oculta
for (i = 0; i < ENTRADAS+1; i++) {
for (j =0; j < NR_NEURON_O; j++)
printf("w_e_o[%d][%d]: %f \n", i, j, w_e_o[i][j]);
printf("\n");
}
//mostra pesos sinapticos da 1camada oculata para a 2camada oculta
for (i = 0; i < NR_NEURON_O+1; i++) {
for (j =0; j < NR_NEURON_O; j++)
printf("w_o_o[%d][%d]: %f \n", i, j, w_o_o[i][j]);
printf("\n");
}
// Inicializa pesos sinapticos da camada oculta para a saida
for (i = 0; i < NR_NEURON_O+1; i++) {
for (j =0; j < SAIDAS; j++)
printf("w_o_s[%d][%d]: %f \n", i, j, w_o_s[i][j]);
printf("\n");
}
}
double f_sigmoid(double net){
return 1 / (1 + exp(-net));
}
void calcular_saidas(double entradas[ENTRADAS])
{
int i, j;
// Calcular os nets da entrada para a camada oculta
for (i = 0; i < NR_NEURON_O; i++) {
saida_o[i][0] = 0.0;
saida_o[i][0] += w_e_o[0][i] * 1; // Calcula saida para bias
for (j = 1; j < ENTRADAS+1; j++)
saida_o[i][0] += w_e_o[j][i] * entradas[j-1];
// Calcular a saida de saida_o[i][0]
saida_o[i][0] = f_sigmoid(saida_o[i][0]);
}
// Calcular net da camada oculta 1 para camada oculta 2
for (i = 0; i < NR_NEURON_O; i++) {
saida_o[i][1] = 0.0;
saida_o[i][1] += w_o_o[0][i] * 1; // Calcula saida para bias
for (j = 1; j < NR_NEURON_O+1; j++)
saida_o[i][1] += w_o_o[j][i] * saida_o[j-1][0];
saida_o[i][1] = f_sigmoid(saida_o[i][1]);
}
// Calcular os nets da camada oculta 2 para a saida
for (i = 0; i < SAIDAS; i++) {
saida_s[i] = 0.0;
saida_s[i] += w_o_s[0][i] * 1; // Calcula saida para bias
for (j = 1; j < NR_NEURON_O+1; j++)
saida_s[i] += w_o_s[j][i] * saida_o[j-1][1];
saida_s[i] = f_sigmoid(saida_s[i]);
}
}
void treinar_RNA()
{
int i, j, k;
double entradas[ENTRADAS];
for (i = 1; i <= EPOCAS; i++) {
printf("epoca %d\n", i);
for (j = 0; j < NR_AMOSTRAS; j++) {
for(k = 0; k < ENTRADAS; k++)
entradas[k] = cj_treinamento[j][k];
// Feedforward
calcular_saidas(entradas);
// Backward (backpropagation)
calcular_delta_saida(cj_treinamento[j][1], cj_treinamento[j][2]);
calcular_gradiente_oculta();
calcular_delta_oculta();
calcular_gradiente_oculta2();
calcular_delta_oculta2();
ajustar_pesos_sinapticos(entradas);
}
}
}
double calcular_erro(double desejado, double saida)
{
return desejado - saida;
}
void menu()
{
int opcao, i;
double entradas[ENTRADAS];
printf("Rede Neural Perceptron de Multiplas Camadas\n");
...