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

How to implement a Neural Network in C++

原问题

我正在开发一个简单的 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实际上已经开始变得有点无用了...

有没有更好的随机函数?

首先,我从这个项目中学到了很多关于我们如何思考的知识,我了解了 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 header:

#include <random>

要使用 std::vectors,我们必须在 vector header:

#include <vector>