多层神经网络:学习功能

数据挖掘 神经网络 无监督学习 C
2022-02-21 15:42:33

这是我使用反向传播学习实现神经网络学习的代码。算法是稳定的,但我没有正确学习输出。你觉得我的学习过程有什么问题吗?

//### Parameter ###
#define Nb_entry 2
#define coeff_app 0.01 
#define par_momentum 0.8 
#define par_nb_test 0.2
#define para_tolerence 0.05
#define para_stop_learning 1000

这是我的学习功能

void fonction_neuron(double * input, Neuron * neuron_info)
{
    int i=0; // loop variable
    double net=0;

    // Computation of the net value type: net = w[0]*bias + sum(w[i]*imp[i])
    net=(*neuron_info).weight[0]; //bias = 1
    for(i=1;i<(*neuron_info).nb_input;i++) net+=(*neuron_info).weight[i]*input[i];

    (*neuron_info).output=net;
    //print_stat_neuron(neuron_info);
}

void fonction_network(Neuron N_network[][10], int nb_layer, int *nb_neuron_per_layer,double *input)
{
    int i,j; //loop variable
    double previous_layer_output[10]={0};

    //Propagation of the signal into the neural network
    for(i=0;i<nb_layer;i++)
    {
        if(i!=0) for(j=0;j<nb_neuron_per_layer[i-1];j++) 
        {
            previous_layer_output[j]=N_network[i-1][j].output;//save previous layer output
            //printf("previous_layer_output[%d]=%f\n",j,previous_layer_output[j]); 
        } 

        for(j=0;j<nb_neuron_per_layer[i];j++)
        {
            //printf(" i=%d j=%d \n", i,j);
            N_network[i][j].old_output=N_network[i][j].output; //save previous value
            if(i==0)fonction_neuron(input, &(N_network[i][j])); //first layer               
            else fonction_neuron(previous_layer_output, &(N_network[i][j])); //other layer using the previous layer output
        }
    }
}
1个回答

以下是一些有助于算法实现的问题:

1-你做了总和,但激活函数在哪里/什么是激活函数(sigmoid、双曲正切、高斯等)?

2-是多层的吗?你是怎么转发的?您是否使用了总和以及激活其他层的每个过去的神经元?

3-您是否将激活的导数存储到反向传播?

4- 你会使用传统的反向传播算法还是遗传算法来调整网络权重?

5-如果您选择 sigmoid 和反向传播,这里是一个示例算法(该算法已经计算了 sigmoid 的导数Oj (1Oj).