代码之家  ›  专栏  ›  技术社区  ›  Ed The ''Pro'' Simon Klee

如何在C++中实现神经网络

  •  -1
  • Ed The ''Pro'' Simon Klee  · 技术社区  · 6 年前

    我正在研究一个简单的C++库。我正在尝试实现一个神经网络。我有两个问题:

    1. 是吗? 在我实现神经网络时需要绘制一个图表吗?


    #ifndef NEURAL_NETWORK_H
    #define NEURAL_NETWORK_H
    
    #include <ctime>
    #include <cstdlib>
    
    class NeuralNetwork {
        public :
            void SetWeight(double tempWeights [15]) {
                for (int i = 0; i < (sizeof(tempWeights) / sizeof(double)); ++i) {
                    weights[i] = tempWeights[i];
                }
            }
    
            double GetWeights() {
                return weights;
            }
    
            void Train(int numInputs, int numOutputs, double inputs[], double outputs[]) {
                double tempWeights[numOutputs];
    
                int iterator = 0;
    
                while (iterator < 10000) {
                      // This loop will train the Neural Network
                }
    
                SetWeights(tempWeights);
            }
    
            double[] Calculate(double inputs[]) {
                 // Calculate Outputs...
    
                 return outputs;
            }
    
            NeuralNetwork(double inputs[], double outputs[]) {
                int numberOfInputs = sizeof(inputs) / sizeof(double);
                int numberOfOutputs = sizeof(outputs) / sizeof(double);
    
                Train(numberOfInputs, numberOfOutputs, inputs[], outputs[]);
            }
        private :
            double weights[15];
    };
    
    #endif // NEURAL_NETWORK_H
    

    编辑和更新的问题

    现在,我正在努力解决性能问题。 srand 实际上已经开始变得有点无益了…

    有更好的随机函数吗?

    1 回复  |  直到 5 年前
        1
  •  0
  •   Ed The ''Pro'' Simon Klee    5 年前

    首先,我学到了很多关于这个项目的想法,我学到了 std::uniform_real_distribution<> std::vector<> 和语法结构。

    srand time 是C函数。因此,为了实现最佳优化,不应使用它们。

    std::uniform_real_distribution 因为它更灵活和稳定。

    std::vector<double> set_random_weights()
    { 
        std::default_random_engine generator; 
        std::uniform_real_distribution<double> distribution(0.0,1.0);
    
        std::vector<double> temp_weights;
    
        for (unsigned int i = 0; i < (num_input_nodes * num_hidden_nodes); ++i)
        {
            temp_weights.push_back(distribution(generator));
        }
    
       return temp_weights;
    }
    

    std::default_random_engine random

    #include <random>
    

    以及使用 std::vector vector

    #include <vector>