我正在研究一个简单的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
实际上已经开始变得毫无帮助...
有更好的随机函数吗?
答案 0 :(得分:0)
首先,我从这个项目中学到了很多想法,了解了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
标头:
#include <random>
要使用std::vector
,必须在vector
标头中:
#include <vector>