Step by Step python
Por: matfbm • 3/9/2017 • Relatório de pesquisa • 2.056 Palavras (9 Páginas) • 274 Visualizações
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define ENTRADAS 1
#define SAIDAS 2
#define NR_AMOSTRAS 5
#define NR_NEURON_O 3
#define CAMADAS_O 2
#define EPOCAS 10000000 //14:05 //21:18
#define TX_APRENDIZADO 0.7
//altura/Motor1/Motor2
double cj_treinamento[NR_AMOSTRAS][ENTRADAS+SAIDAS+1] = {
{0.26, 0.1289, 0.1245},
{0.35, 0.1278, 0.1256},
{0.44, 0.1267, 0.1267},
{0.75, 0.1256, 0.1278},
{1.06, 0.1245, 0.1289},
};
double w_e_o[ENTRADAS+1][NR_NEURON_O]; //sinapses entrada para oculta 1
double w_o_o[NR_NEURON_O+1][NR_NEURON_O]; // sinapses oculta 1 para oculta 2
double w_o_s[NR_NEURON_O+1][SAIDAS]; // sinapses oculta 2 para saida
double saida_o[NR_NEURON_O][CAMADAS_O]; //saidas das camadas ocultas
double saida_s[SAIDAS]; //saida final
double delta_saida[SAIDAS];
double gradiente_oculta[NR_NEURON_O][CAMADAS_O]; // gradiente
double delta_oculta[NR_NEURON_O][CAMADAS_O]; //delta
/*
Cabecalho das funcoes auxiliares
*/
void inicializa_sinapses();
int gera_nr_aleatorios();
void mostrar_sinapses();
double f_sigmoid(double net);
void calcular_saidas(double entradas[ENTRADAS]);
void treinar_RNA();
double calcular_erro(double desejado, double saida);
void menu();
void calcular_delta_saida(double desejado, double desejado2);
void calcular_delta_oculta();
void calcular_delta_oculta2();
void calcular_gradiente_oculta();
void calcular_gradiente_oculta2();
void ajustar_pesos_sinapticos(double entradas[ENTRADAS]);
void salvaSinapses();
/*
Função principal
*/
int main()
{
srand(time(NULL));
while (1) {
menu();
}
return 0;
}
void inicializa_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++)
w_e_o[i][j] = gera_nr_aleatorios();
//inicializa pesos sinapticos da camda oculta 1 para camada oculta 2
for (i = 0; i < NR_NEURON_O+1; i++)
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");
}
...