I';我不知道如何在这种神经网络训练方法中引用权重 < >我写了C++中的自己的类神经网络类。我不确定如何引用此声明中的权重: in=in+(输入[l]*calcWeights[l]);

I';我不知道如何在这种神经网络训练方法中引用权重 < >我写了C++中的自己的类神经网络类。我不确定如何引用此声明中的权重: in=in+(输入[l]*calcWeights[l]);,c++,neural-network,backpropagation,C++,Neural Network,Backpropagation,原因是,权重可能比输入的权重多。这是我的密码: void列(整数输入、整数输出、双输入[]、双输出[]){ //设置随机种子: srand(时间(0)); //权重(n个输入)*n个输出)=n个权重分支): 双计算重量[numInputs*numOutputs]; //错误(n个输入)*n个输出)=n个错误分支): 双重错误[numinput*numoutput]; //将权重设置为“随机”: 对于(int j=0;j

原因是,权重可能比输入的权重多。这是我的密码:

void列(整数输入、整数输出、双输入[]、双输出[]){
//设置随机种子:
srand(时间(0));
//权重(n个输入)*n个输出)=n个权重分支):
双计算重量[numInputs*numOutputs];
//错误(n个输入)*n个输出)=n个错误分支):
双重错误[numinput*numoutput];
//将权重设置为“随机”:
对于(int j=0;j
从您在评论中的解释来看,我相信稍微修改一下循环将满足您的需求

for (int k = 0 ; k < numOutputs ; k = k + 1) {
    in = 0; //Reset in to 0 at the beginning of each output loop

    for (int l = 0 ; l < numInputs ; l = l + 1) {
        in = in + (inputs [l] * calcWeights [l + k*numInputs]) ;
    }

    out [k] = in + GetBias () ;
}
for(int k=0;k
您还应该确保初始化了上面的所有权重

for (int j = 0 ; j < (numInputs * numOutputs) ; j = j + 1) {
    calcWeights [j] = ((-1 * numInputs) + (((double) rand ()) % (1 * numInputs))) ;
}
for(int j=0;j<(numinput*numoutput);j=j+1){
计算权重[j]=((-1*numput)+((双)兰德())%(1*numput));
}

对于一些样式选择,我只想指出,您可以用简单的
++k
替换
k=k+1
。同样,您可以替换
in=in+在+=

不完全清楚你在问什么。那么,
calcWeights[l+k*numinput]
呢。您只初始化了一些权重。@super我将每个权重作为一个连接,每个神经网络包含多个接受输入和输出的神经元。这些神经元之间的联系是重量。我使用的公式是
input1*weight1+…+inputN*weightN+bias=输出
。所以,我的意思是:我怎样才能在不留下任何权重的情况下,将每个权重和输入值相乘呢?我还是不明白。如果有例如2个输入和2个输出,您是否可以提供一个小示例,说明您希望代码执行的操作。然后你有4个砝码,对吗?那么使用哪个权重取决于电流输入和输出,不是吗?所以你想要
i1*w1+i2*w2+b=o1
i1*w3+i2*w4+b=o2
@super如果我给它两个输入,我期望两个输出,方程将是
(i1*w1)+(i2*w2)+b=o1
(i1*w3)+(i2+w4)+b=o2
。如果我给它3个输入,我期望2个输出,那么方程将是
(i1*w1)+(i2*w2)+(i3*w3)+b=o1
(i1*w4)+(i2*w5)+(i3*w6)+b=o2
如果我的权重是以您上面给我的形式计算的,那么我的误差数组也必须以同样的方式计算吗?如果没有,请你解释一下。。。谢谢。这取决于您使用的错误函数。看一看。我使用相同的
for
循环样式更正了错误。谢谢