⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 network.h

📁 该程序是在vc环境下编写的bp神经网络c++类库
💻 H
字号:


#ifndef ANNetwork_h
#define ANNetwork_h



class ANeuron;

////////////////////////////////////ANN layer///////////////////////////////////////////////////
class ANNLayer
{        
        friend class ANNetwork;
public:
        ANNLayer(int neurons_number);    
        ~ANNLayer();
        
        inline int get_neurons_number() const;
        inline ANeuron *get_neuron(int i) const;

private:
        wchar_t layer_name[_MAX_PATH];          //layer name
        int m_neurons_number;                   //number of neurons in layer
        vector<ANeuron *> neurons;              //array of Neuron classes
        
};

inline int ANNLayer::get_neurons_number() const
{
        return m_neurons_number;
}

inline ANeuron *ANNLayer::get_neuron(int i) const
{
        if (i > get_neurons_number() - 1 || i < 0)
                return 0;
        return neurons[i];
}
////////////////////////////////////////////////////////////////////////////////////////////////





///////////////////////////////////ANN network//////////////////////////////////////////////////
class ANNetwork
{
public:
        ANNetwork(int layers_number, int *neurons_per_layer);                   //number of layers, and neurons per layer
        ANNetwork(const wchar_t *fname);                                        //custom config from file
        ~ANNetwork();

        //init links for network [default SIGMOID activation function]
        void init_links(const float *avec = 0, const float *mvec = 0, int ifunc = 0, int hfunc = 1);               
        void randomize_weights(unsigned int rseed = 0);
                        
        bool train(const float *ivec, float *ovec, 
                            const float *dsrdvec, float error = 0.05);          //train network with input vector and desired output vector
        void classify(const float *ivec, float *ovec);                          //run network with in vector [ivec],  return in [ovec] network out        
        bool save(const wchar_t *fname) const;                          

        inline int status() const;        
        inline int get_layers_number() const;         
        inline ANNLayer *get_layer(int i) const;        


private:        
        int m_status;                   //status -1 err, 0-OK, 1-random weights
        int m_layers_number;            //number of layers in network
        vector<ANNLayer *> layers;      //array of layers

        float m_nrule;                  //learning rule  0.2
        float m_alpha;                  //momentum  0.7
        
        void backprop_run(const float *dsrdvec);
        void network_output(float *ovec) const;                               //get network out
};

inline int ANNetwork::status() const
{
        return m_status;
}

inline int ANNetwork::get_layers_number() const
{
        return m_layers_number;
} 

inline ANNLayer *ANNetwork::get_layer(int i) const
{
        if (i > get_layers_number() - 1 || i < 0)
                return 0;
        return layers[i];
}
////////////////////////////////////////////////////////////////////////////////////////////////


#endif ANNetwork_h

/*
     ANNetwork

     1 2 3 4           layers,  ANNLayer
    ------------
    |N|N|N|N| | ....   neurons N,  ANeuron
    ------------
    |N|N|N| | | ....
    ------------
    |N| | | | |
    ...
    ...
    ...

                    */







/*
  file format
  3
  40 10 1
  
  0
  1                activation function 0-linear, 1-sigmoid
  
  [input norm]

  weights





 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -