从两个数组乘以值(人工神经元)

时间:2015-04-20 04:38:28

标签: c++ arrays artificial-intelligence multiplication

////////////////////MAKE INPUT VALUES////////////////////
double *NumOfInputsPointer = NULL;
std::cout << "How many inputs?" << std::endl;
int NumOfInputs;
std::cin >> NumOfInputs;
NumOfInputsPointer = new double[NumOfInputs];
std::cout << std::endl;
double InputVal;
for(int a = 0; a < NumOfInputs; a++)
{
    std::cout << "What is the value for input " << a << std::endl;
    a+1;
    std::cin >> InputVal;
    *(NumOfInputsPointer + a) = InputVal;
}

std::cout << std::endl;

////////////////////MAKE WEIGHTS////////////////////
double *NumOfWeightsPointer = NULL; 
int NumOfWeights;
NumOfWeightsPointer = new double[NumOfWeights];
double WightVal;
for(int a = 0; a < NumOfInputs; a++)
{
    *(NumOfWeightsPointer + a) = 0.5;
}

////////////////////Multiplication BRAIN BROKE!!!!!////////////////////
double *MultiplyPointer = NULL;
MultiplyPointer = NumOfInputsPointer;
for(int a = 0; a < NumOfInputs; a++)
{
      //Stuff to do things 
}

上面的代码将制作一个人工神经元。我已经构建了一个数组,其中包含用户想要的输入数量,然后自动使每个输入的权重为0.5。

我撞到的墙,让我挣扎着输入值数组与它们的权重数组相乘,然后将它们保存在另一个数组中,然后再添加到修改器中。

我的挣扎是乘法并将其保存到数组中。我希望我能很好地解释我的问题。

2 个答案:

答案 0 :(得分:2)

此代码存在许多问题。我强烈建议使用std :: vector而不是数组。如果每个输入的权重都是0.5,那么创建一个所有元素都是0.5的数组有什么意义呢?只需创建一个表示0.5权重的常量变量并将其应用于每个输入。我所知道的第二个数组是不必要的。创建最后一个数组(再次,使用向量这将更容易)将类似于第一个数组,因为大小将是相同的。它基于输入的数量。因此,只需创建一个相同大小的数组,循环遍历第一个数组中的每个元素,使用上面描述的常量进行乘法,然后将结果存储到新数组中。

答案 1 :(得分:0)

只是new就像你对其他人一样,并将乘法结果存储在那里。

MultiplyPointer = new double[NumOfInputs];
for (a = 0; a < NumOfInputs; a++) {
    MultiplyPointer[a] = NumOfWeightsPointer[a] * NumOfInputsPointer[a];
}

话虽如此,有更好的方法来解决你的问题。已经提到std::vector,这使得内存管理和循环位更容易。我会更进一步,并在库中加入矩阵和矩阵表达式的概念,例如OpenCVdlib

使用OpenCV中的Mat的示例:

cv::Mat input(NumOfInputs, 1, CV_64F, NumOfInputsPointer);
cv::Mat weights(NumOfInputs, 1, CV_64F, cv::Scalar(0.5));
cv::Mat result = input.mul(weights);

如果不修改和重用权重向量,只需跳过整个事情:

cv::Mat result = input.mul(cv::Scalar(0.5));