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

时间:2018-06-23 07:53:24

标签: c++ neural-network backpropagation

原始问题

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

  1. 是否有任何教程说明如何实现它们?

  2. 在实现神经网络时,真的需要绘制图形吗?


到目前为止我写的代码是:

#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 个答案:

答案 0 :(得分:0)

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

srandtime是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::uniform_real_distributionstd::default_random_engine,我们都需要包含random标头:

#include <random>

要使用std::vector,必须在vector标头中:

#include <vector>