如何在 C++ 中实现神经网络
How to implement a Neural Network in C++
原问题
我正在开发一个简单的 C++ 库。我正在尝试实施神经网络。我有两个问题:
是否有说明如何实施它们的教程?
我在实现神经网络时真的需要绘制图表吗?
目前我写的代码是:
#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<>
和语法结构。
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::uniform_real_distribution
和 std::default_random_engine
我们需要包含 random
header:
#include <random>
要使用 std::vector
s,我们必须在 vector
header:
#include <vector>
原问题
我正在开发一个简单的 C++ 库。我正在尝试实施神经网络。我有两个问题:
是否有说明如何实施它们的教程?
我在实现神经网络时真的需要绘制图表吗?
目前我写的代码是:
#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<>
和语法结构。
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::uniform_real_distribution
和 std::default_random_engine
我们需要包含 random
header:
#include <random>
要使用 std::vector
s,我们必须在 vector
header:
#include <vector>