如何在C+中反向传播神经网络+;? 我一直试图在C++中构造神经网络,而我的反向传播代码并不像我希望的那样工作。我有一个文本文档,告诉网络如何运作。它有2个输入神经元,1个隐藏层,4个神经元和2个输出神经元。我现在正在学习成为异或门。我有它,所以它需要网络的成本,乘以.55(缩放),然后从权重/偏差中加/减,取决于输出与正确答案的接近程度,权重/偏差是+还是-。代码如下: void Network::backProp(void) { double b = 0,a; int loop,l; for(loop=0;loop<4;loop++) { //Adds up the cost of the data b = b + (pow(results[2*loop]-key[4*loop+2],2)+pow(results[2*loop+1]-key[4*loop+3],2)); } a=.55*b; if(b>.01) { for(l=0;l<4;l++) { if(round(results[2*l])!=key[4*l+2]) { if(data[0] <= 0) { data[0] = data[0]+a; //(abs(data[0])/a); } else { data[0] = data[0]-a; //(abs(data[0])/a); } if(data[1] <= 0) { data[1] = data[1]+a; //(abs(data[1])/a); } else { data[1] = data[1]-a; //(abs(data[1])/a); } if(data[2] <= 0) { data[2] = data[2]+a; //(abs(data[2])/a); } else { data[2] = data[2]-a; //(abs(data[2])/a); } if(data[3] <= 0) { data[3] = data[3]+a; //(abs(data[3])/a); } else { data[3] = data[3]-a; //(abs(data[3])/a); } if(data[4] <= 0) { data[4] = data[4]+a; //(abs(data[4])/a); } else { data[4] = data[4]-a; //(abs(data[4])/a); } if(data[6] <= 0) { data[6] = data[6]+a; //(abs(data[6])/a); } else { data[6] = data[6]-a; //(abs(data[6])/a); } if(data[7] <= 0) { data[7] = data[7]+a; //(abs(data[7])/a); } else { data[7] = data[7]-a; //(abs(data[7])/a); } if(data[8] <= 0) { data[8] = data[8]+a; //(abs(data[8])/a); } else { data[8] = data[8]-a; //(abs(data[8])/a); } if(data[9] <= 0) { data[9] = data[9]+a; //(abs(data[9])/a); } else { data[9] = data[9]-a; //(abs(data[9])/a); } if(data[10] <= 0) { data[10] = data[10]+a; //(abs(data[10])/a); } else { data[10] = data[10]-a; //(abs(data[10])/a); } if(data[11] <= 0) { data[11] = data[11]+a; //(abs(data[11])/a); } else { data[11] = data[11]-a; //(abs(data[11])/a); } if(data[12] <= 0) { data[12] = data[12]+a; //(abs(data[12])/a); } else { data[12] = data[12]-a; //(abs(data[12])/a); } if(data[13] <= 0) { data[13] = data[13]+a; //(abs(data[13])/a); } else { data[13] = data[13]-a; //(abs(data[13])/a); } if(data[14] <= 0) { data[14] = data[14]+a; //(abs(data[14])/a); } else { data[14] = data[14]-a; //(abs(data[14])/a); } if(data[16] <= 0) { data[16] = data[16]+a; //(abs(data[16])/a); } else { data[16] = data[16]-a; //(abs(data[16])/a); } if(data[18] <= 0) { data[18] = data[18]+a; //(abs(data[18])/a); } else { data[18] = data[18]-a; //(abs(data[18])/a); } if(data[20] <= 0) { data[20] = data[20]+a; //(abs(data[20])/a); } else { data[20] = data[20]-a; //(abs(data[20])/a); } } else { if(data[0] <= 0) { data[0] = data[0]-a; //(abs(data[0])/a); } else { data[0] = data[0]+a; //(abs(data[0])/a); } if(data[1] <= 0) { data[1] = data[1]-a; //(abs(data[1])/a); } else { data[1] = data[1]+a; //(abs(data[1])/a); } if(data[2] <= 0) { data[2] = data[2]-a; //(abs(data[2])/a); } else { data[2] = data[2]+a; //(abs(data[2])/a); } if(data[3] <= 0) { data[3] = data[3]-a; //(abs(data[3])/a); } else { data[3] = data[3]+a; //(abs(data[3])/a); } if(data[4] <= 0) { data[4] = data[4]-a; //(abs(data[4])/a); } else { data[4] = data[4]+a; //(abs(data[4])/a); } if(data[6] <= 0) { data[6] = data[6]-a; //(abs(data[6])/a); } else { data[6] = data[6]+a; //(abs(data[6])/a); } if(data[7] <= 0) { data[7] = data[7]-a; //(abs(data[7])/a); } else { data[7] = data[7]+a; //(abs(data[7])/a); } if(data[8] <= 0) { data[8] = data[8]-a; //(abs(data[8])/a); } else { data[8] = data[8]+a; //(abs(data[8])/a); } if(data[9] <= 0) { data[9] = data[9]-a; //(abs(data[9])/a); } else { data[9] = data[9]+a; //(abs(data[9])/a); } if(data[10] <= 0) { data[10] = data[10]-a; //(abs(data[10])/a); } else { data[10] = data[10]+a; //(abs(data[10])/a); } if(data[11] <= 0) { data[11] = data[11]-a; //(abs(data[11])/a); } else { data[11] = data[11]+a; //(abs(data[11])/a); } if(data[12] <= 0) { data[12] = data[12]-a; //(abs(data[12])/a); } else { data[12] = data[12]+a; //(abs(data[12])/a); } if(data[13] <= 0) { data[13] = data[13]-a; //(abs(data[13])/a); } else { data[13] = data[13]+a; //(abs(data[13])/a); } if(data[14] <= 0) { data[14] = data[14]-a; //(abs(data[14])/a); } else { data[14] = data[14]+a; //(abs(data[14])/a); } if(data[16] <= 0) { data[16] = data[16]-a; //(abs(data[16])/a); } else { data[16] = data[16]+a; //(abs(data[16])/a); } if(data[18] <= 0) { data[18] = data[18]-a; //(abs(data[18])/a); } else { data[18] = data[18]+a; //(abs(data[18])/a); } if(data[20] <= 0) { data[20] = data[20]-a; //(abs(data[20])/a); } else { data[20] = data[20]+a; //(abs(data[20])/a); } } if(round(results[2*l+1])!=key[4*l+3]) { if(data[0] <= 0) { data[0] = data[0]+a; //(abs(data[0])/a); } else { data[0] = data[0]-a; //(abs(data[0])/a); } if(data[1] <= 0) { data[1] = data[1]+a; //(abs(data[1])/a); } else { data[1] = data[1]-a; //(abs(data[1])/a); } if(data[2] <= 0) { data[2] = data[2]+a; //(abs(data[2])/a); } else { data[2] = data[2]-a; //(abs(data[2])/a); } if(data[3] <= 0) { data[3] = data[3]+a; //(abs(data[3])/a); } else { data[3] = data[3]-a; //(abs(data[3])/a); } if(data[4] <= 0) { data[4] = data[4]+a; //(abs(data[4])/a); } else { data[4] = data[4]-a; //(abs(data[4])/a); } if(data[5] <= 0) { data[5] = data[5]+a; //(abs(data[5])/a); } else { data[5] = data[5]-a; //(abs(data[5])/a); } if(data[7] <= 0) { data[7] = data[7]+a; //(abs(data[7])/a); } else { data[7] = data[7]-a; //(abs(data[7])/a); } if(data[8] <= 0) { data[8] = data[8]+a; //(abs(data[8])/a); } else { data[8] = data[8]-a; //(abs(data[8])/a); } if(data[9] <= 0) { data[9] = data[9]+a; //(abs(data[9])/a); } else { data[9] = data[9]-a; //(abs(data[9])/a); } if(data[10] <= 0) { data[10] = data[10]+a; //(abs(data[10])/a); } else { data[10] = data[10]-a; //(abs(data[10])/a); } if(data[11] <= 0) { data[11] = data[11]+a; //(abs(data[11])/a); } else { data[11] = data[11]-a; //(abs(data[11])/a); } if(data[12] <= 0) { data[12] = data[12]+a; //(abs(data[12])/a); } else { data[12] = data[12]-a; //(abs(data[12])/a); } if(data[13] <= 0) { data[13] = data[13]+a; //(abs(data[13])/a); } else { data[13] = data[13]-a; //(abs(data[13])/a); } if(data[15] <= 0) { data[15] = data[15]+a; //(abs(data[15])/a); } else { data[15] = data[15]-a; //(abs(data[15])/a); } if(data[17] <= 0) { data[17] = data[17]+a; //(abs(data[17])/a); } else { data[17] = data[17]-a; //(abs(data[17])/a); } if(data[19] <= 0) { data[19] = data[19]+a; //(abs(data[19])/a); } else { data[19] = data[19]-a; //(abs(data[19])/a); } if(data[21] <= 0) { data[21] = data[21]+a; //(abs(data[21])/a); } else { data[21] = data[21]-a; //(abs(data[21])/a); } } else { if(data[0] <= 0) { data[0] = data[0]-a; //(abs(data[0])/a); } else { data[0] = data[0]+a; //(abs(data[0])/a); } if(data[1] <= 0) { data[1] = data[1]-a; //(abs(data[1])/a); } else { data[1] = data[1]+a; //(abs(data[1])/a); } if(data[2] <= 0) { data[2] = data[2]-a; //(abs(data[2])/a); } else { data[2] = data[2]+a; //(abs(data[2])/a); } if(data[3] <= 0) { data[3] = data[3]-a; //(abs(data[3])/a); } else { data[3] = data[3]+a; //(abs(data[3])/a); } if(data[4] <= 0) { data[4] = data[4]-a; //(abs(data[4])/a); } else { data[4] = data[4]+a; //(abs(data[4])/a); } if(data[5] <= 0) { data[5] = data[5]-a; //(abs(data[5])/a); } else { data[5] = data[5]+a; //(abs(data[5])/a); } if(data[7] <= 0) { data[7] = data[7]-a; //(abs(data[7])/a); } else { data[7] = data[7]+a; //(abs(data[7])/a); } if(data[8] <= 0) { data[8] = data[8]-a; //(abs(data[8])/a); } else { data[8] = data[8]+a; //(abs(data[8])/a); } if(data[9] <= 0) { data[9] = data[9]-a; //(abs(data[9])/a); } else { data[9] = data[9]+a; //(abs(data[9])/a); } if(data[10] <= 0) { data[10] = data[10]-a; //(abs(data[10])/a); } else { data[10] = data[10]+a; //(abs(data[10])/a); } if(data[11] <= 0) { data[11] = data[11]-a; //(abs(data[11])/a); } else { data[11] = data[11]+a; //(abs(data[11])/a); } if(data[12] <= 0) { data[12] = data[12]-a; //(abs(data[12])/a); } else { data[12] = data[12]+a; //(abs(data[12])/a); } if(data[13] <= 0) { data[13] = data[13]-a; //(abs(data[13])/a); } else { data[13] = data[13]+a; //(abs(data[13])/a); } if(data[15] <= 0) { data[15] = data[15]-a; //(abs(data[15])/a); } else { data[15] = data[15]+a; //(abs(data[15])/a); } if(data[17] <= 0) { data[17] = data[17]-a; //(abs(data[17])/a); } else { data[17] = data[17]+a; //(abs(data[17])/a); } if(data[19] <= 0) { data[19] = data[19]-a; //(abs(data[19])/a); } else { data[19] = data[19]+a; //(abs(data[19])/a); } if(data[21] <= 0) { data[21] = data[21]-a; //(abs(data[21])/a); } else { data[21] = data[21]+a; //(abs(data[21])/a); } } } } } void网络::backProp(void) { 双b=0,a; int循环,l; for(循环=0;循环.01) { 对于(l=0;l

如何在C+中反向传播神经网络+;? 我一直试图在C++中构造神经网络,而我的反向传播代码并不像我希望的那样工作。我有一个文本文档,告诉网络如何运作。它有2个输入神经元,1个隐藏层,4个神经元和2个输出神经元。我现在正在学习成为异或门。我有它,所以它需要网络的成本,乘以.55(缩放),然后从权重/偏差中加/减,取决于输出与正确答案的接近程度,权重/偏差是+还是-。代码如下: void Network::backProp(void) { double b = 0,a; int loop,l; for(loop=0;loop<4;loop++) { //Adds up the cost of the data b = b + (pow(results[2*loop]-key[4*loop+2],2)+pow(results[2*loop+1]-key[4*loop+3],2)); } a=.55*b; if(b>.01) { for(l=0;l<4;l++) { if(round(results[2*l])!=key[4*l+2]) { if(data[0] <= 0) { data[0] = data[0]+a; //(abs(data[0])/a); } else { data[0] = data[0]-a; //(abs(data[0])/a); } if(data[1] <= 0) { data[1] = data[1]+a; //(abs(data[1])/a); } else { data[1] = data[1]-a; //(abs(data[1])/a); } if(data[2] <= 0) { data[2] = data[2]+a; //(abs(data[2])/a); } else { data[2] = data[2]-a; //(abs(data[2])/a); } if(data[3] <= 0) { data[3] = data[3]+a; //(abs(data[3])/a); } else { data[3] = data[3]-a; //(abs(data[3])/a); } if(data[4] <= 0) { data[4] = data[4]+a; //(abs(data[4])/a); } else { data[4] = data[4]-a; //(abs(data[4])/a); } if(data[6] <= 0) { data[6] = data[6]+a; //(abs(data[6])/a); } else { data[6] = data[6]-a; //(abs(data[6])/a); } if(data[7] <= 0) { data[7] = data[7]+a; //(abs(data[7])/a); } else { data[7] = data[7]-a; //(abs(data[7])/a); } if(data[8] <= 0) { data[8] = data[8]+a; //(abs(data[8])/a); } else { data[8] = data[8]-a; //(abs(data[8])/a); } if(data[9] <= 0) { data[9] = data[9]+a; //(abs(data[9])/a); } else { data[9] = data[9]-a; //(abs(data[9])/a); } if(data[10] <= 0) { data[10] = data[10]+a; //(abs(data[10])/a); } else { data[10] = data[10]-a; //(abs(data[10])/a); } if(data[11] <= 0) { data[11] = data[11]+a; //(abs(data[11])/a); } else { data[11] = data[11]-a; //(abs(data[11])/a); } if(data[12] <= 0) { data[12] = data[12]+a; //(abs(data[12])/a); } else { data[12] = data[12]-a; //(abs(data[12])/a); } if(data[13] <= 0) { data[13] = data[13]+a; //(abs(data[13])/a); } else { data[13] = data[13]-a; //(abs(data[13])/a); } if(data[14] <= 0) { data[14] = data[14]+a; //(abs(data[14])/a); } else { data[14] = data[14]-a; //(abs(data[14])/a); } if(data[16] <= 0) { data[16] = data[16]+a; //(abs(data[16])/a); } else { data[16] = data[16]-a; //(abs(data[16])/a); } if(data[18] <= 0) { data[18] = data[18]+a; //(abs(data[18])/a); } else { data[18] = data[18]-a; //(abs(data[18])/a); } if(data[20] <= 0) { data[20] = data[20]+a; //(abs(data[20])/a); } else { data[20] = data[20]-a; //(abs(data[20])/a); } } else { if(data[0] <= 0) { data[0] = data[0]-a; //(abs(data[0])/a); } else { data[0] = data[0]+a; //(abs(data[0])/a); } if(data[1] <= 0) { data[1] = data[1]-a; //(abs(data[1])/a); } else { data[1] = data[1]+a; //(abs(data[1])/a); } if(data[2] <= 0) { data[2] = data[2]-a; //(abs(data[2])/a); } else { data[2] = data[2]+a; //(abs(data[2])/a); } if(data[3] <= 0) { data[3] = data[3]-a; //(abs(data[3])/a); } else { data[3] = data[3]+a; //(abs(data[3])/a); } if(data[4] <= 0) { data[4] = data[4]-a; //(abs(data[4])/a); } else { data[4] = data[4]+a; //(abs(data[4])/a); } if(data[6] <= 0) { data[6] = data[6]-a; //(abs(data[6])/a); } else { data[6] = data[6]+a; //(abs(data[6])/a); } if(data[7] <= 0) { data[7] = data[7]-a; //(abs(data[7])/a); } else { data[7] = data[7]+a; //(abs(data[7])/a); } if(data[8] <= 0) { data[8] = data[8]-a; //(abs(data[8])/a); } else { data[8] = data[8]+a; //(abs(data[8])/a); } if(data[9] <= 0) { data[9] = data[9]-a; //(abs(data[9])/a); } else { data[9] = data[9]+a; //(abs(data[9])/a); } if(data[10] <= 0) { data[10] = data[10]-a; //(abs(data[10])/a); } else { data[10] = data[10]+a; //(abs(data[10])/a); } if(data[11] <= 0) { data[11] = data[11]-a; //(abs(data[11])/a); } else { data[11] = data[11]+a; //(abs(data[11])/a); } if(data[12] <= 0) { data[12] = data[12]-a; //(abs(data[12])/a); } else { data[12] = data[12]+a; //(abs(data[12])/a); } if(data[13] <= 0) { data[13] = data[13]-a; //(abs(data[13])/a); } else { data[13] = data[13]+a; //(abs(data[13])/a); } if(data[14] <= 0) { data[14] = data[14]-a; //(abs(data[14])/a); } else { data[14] = data[14]+a; //(abs(data[14])/a); } if(data[16] <= 0) { data[16] = data[16]-a; //(abs(data[16])/a); } else { data[16] = data[16]+a; //(abs(data[16])/a); } if(data[18] <= 0) { data[18] = data[18]-a; //(abs(data[18])/a); } else { data[18] = data[18]+a; //(abs(data[18])/a); } if(data[20] <= 0) { data[20] = data[20]-a; //(abs(data[20])/a); } else { data[20] = data[20]+a; //(abs(data[20])/a); } } if(round(results[2*l+1])!=key[4*l+3]) { if(data[0] <= 0) { data[0] = data[0]+a; //(abs(data[0])/a); } else { data[0] = data[0]-a; //(abs(data[0])/a); } if(data[1] <= 0) { data[1] = data[1]+a; //(abs(data[1])/a); } else { data[1] = data[1]-a; //(abs(data[1])/a); } if(data[2] <= 0) { data[2] = data[2]+a; //(abs(data[2])/a); } else { data[2] = data[2]-a; //(abs(data[2])/a); } if(data[3] <= 0) { data[3] = data[3]+a; //(abs(data[3])/a); } else { data[3] = data[3]-a; //(abs(data[3])/a); } if(data[4] <= 0) { data[4] = data[4]+a; //(abs(data[4])/a); } else { data[4] = data[4]-a; //(abs(data[4])/a); } if(data[5] <= 0) { data[5] = data[5]+a; //(abs(data[5])/a); } else { data[5] = data[5]-a; //(abs(data[5])/a); } if(data[7] <= 0) { data[7] = data[7]+a; //(abs(data[7])/a); } else { data[7] = data[7]-a; //(abs(data[7])/a); } if(data[8] <= 0) { data[8] = data[8]+a; //(abs(data[8])/a); } else { data[8] = data[8]-a; //(abs(data[8])/a); } if(data[9] <= 0) { data[9] = data[9]+a; //(abs(data[9])/a); } else { data[9] = data[9]-a; //(abs(data[9])/a); } if(data[10] <= 0) { data[10] = data[10]+a; //(abs(data[10])/a); } else { data[10] = data[10]-a; //(abs(data[10])/a); } if(data[11] <= 0) { data[11] = data[11]+a; //(abs(data[11])/a); } else { data[11] = data[11]-a; //(abs(data[11])/a); } if(data[12] <= 0) { data[12] = data[12]+a; //(abs(data[12])/a); } else { data[12] = data[12]-a; //(abs(data[12])/a); } if(data[13] <= 0) { data[13] = data[13]+a; //(abs(data[13])/a); } else { data[13] = data[13]-a; //(abs(data[13])/a); } if(data[15] <= 0) { data[15] = data[15]+a; //(abs(data[15])/a); } else { data[15] = data[15]-a; //(abs(data[15])/a); } if(data[17] <= 0) { data[17] = data[17]+a; //(abs(data[17])/a); } else { data[17] = data[17]-a; //(abs(data[17])/a); } if(data[19] <= 0) { data[19] = data[19]+a; //(abs(data[19])/a); } else { data[19] = data[19]-a; //(abs(data[19])/a); } if(data[21] <= 0) { data[21] = data[21]+a; //(abs(data[21])/a); } else { data[21] = data[21]-a; //(abs(data[21])/a); } } else { if(data[0] <= 0) { data[0] = data[0]-a; //(abs(data[0])/a); } else { data[0] = data[0]+a; //(abs(data[0])/a); } if(data[1] <= 0) { data[1] = data[1]-a; //(abs(data[1])/a); } else { data[1] = data[1]+a; //(abs(data[1])/a); } if(data[2] <= 0) { data[2] = data[2]-a; //(abs(data[2])/a); } else { data[2] = data[2]+a; //(abs(data[2])/a); } if(data[3] <= 0) { data[3] = data[3]-a; //(abs(data[3])/a); } else { data[3] = data[3]+a; //(abs(data[3])/a); } if(data[4] <= 0) { data[4] = data[4]-a; //(abs(data[4])/a); } else { data[4] = data[4]+a; //(abs(data[4])/a); } if(data[5] <= 0) { data[5] = data[5]-a; //(abs(data[5])/a); } else { data[5] = data[5]+a; //(abs(data[5])/a); } if(data[7] <= 0) { data[7] = data[7]-a; //(abs(data[7])/a); } else { data[7] = data[7]+a; //(abs(data[7])/a); } if(data[8] <= 0) { data[8] = data[8]-a; //(abs(data[8])/a); } else { data[8] = data[8]+a; //(abs(data[8])/a); } if(data[9] <= 0) { data[9] = data[9]-a; //(abs(data[9])/a); } else { data[9] = data[9]+a; //(abs(data[9])/a); } if(data[10] <= 0) { data[10] = data[10]-a; //(abs(data[10])/a); } else { data[10] = data[10]+a; //(abs(data[10])/a); } if(data[11] <= 0) { data[11] = data[11]-a; //(abs(data[11])/a); } else { data[11] = data[11]+a; //(abs(data[11])/a); } if(data[12] <= 0) { data[12] = data[12]-a; //(abs(data[12])/a); } else { data[12] = data[12]+a; //(abs(data[12])/a); } if(data[13] <= 0) { data[13] = data[13]-a; //(abs(data[13])/a); } else { data[13] = data[13]+a; //(abs(data[13])/a); } if(data[15] <= 0) { data[15] = data[15]-a; //(abs(data[15])/a); } else { data[15] = data[15]+a; //(abs(data[15])/a); } if(data[17] <= 0) { data[17] = data[17]-a; //(abs(data[17])/a); } else { data[17] = data[17]+a; //(abs(data[17])/a); } if(data[19] <= 0) { data[19] = data[19]-a; //(abs(data[19])/a); } else { data[19] = data[19]+a; //(abs(data[19])/a); } if(data[21] <= 0) { data[21] = data[21]-a; //(abs(data[21])/a); } else { data[21] = data[21]+a; //(abs(data[21])/a); } } } } } void网络::backProp(void) { 双b=0,a; int循环,l; for(循环=0;循环.01) { 对于(l=0;l,c++,neural-network,C++,Neural Network,将此块移动到分离功能: if(data[0] <= 0) { data[0] = data[0]+a; //(abs(data[0])/a); } else { data[0] = data[0]-a; //(abs(data[0])/a); } if(data[0]这是您的代码的简化版本 void Network::backProp(void) { double b = 0,a; int l

将此块移动到分离功能:

    if(data[0] <= 0)
    {
        data[0] = data[0]+a; //(abs(data[0])/a);
    }
    else
    {
        data[0] = data[0]-a; //(abs(data[0])/a);
    }

if(data[0]这是您的代码的简化版本

void Network::backProp(void)
{
    double b = 0,a;
    int loop,l;
    int inclusion1 [] = {0,1,2,3,4,6,7,8,9,10,11,12,13,14,16,18,20};
    int inclusion2 [] = {0,1,2,3,4,5,7,8,9,10,11,12,13,15,17,19,21};
    int j = 0;
    for(loop=0;loop<4;loop++)
    {
    //Adds up the cost of the data
        b = b + (pow(results[2*loop]-key[4*loop+2],2)+pow(results[2*loop+1]-key[4*loop+3],2));
    }
    a=.55*b;

    if(b>.01)
    {
        for(l=0;l<4;l++)
        {
            for(j=0;j<17;j++)
            {
                if(round(results[2*l])!=key[4*l+2])
                {
                    data[inclusion1[j]] = data[inclusion1[j]] - abs(data[inclusion1[j]])/data[inclusion1[j]]*a;
                }

                if(round(results[2*l+1])!=key[4*l+3])
                {
                    data[inclusion2[j]] = data[inclusion2[j]] + abs(data[inclusion2[j]])/data[inclusion2[j]]*a;
                }
            }
        }
    }
}

我认为你有一个关于
数据[5]
的复制+粘贴错误,如果你写了一个循环而不是反复粘贴相同的代码,那是不会发生的。是否应该缺少
数据[17]
呢?是否应该
数据[19]
be missing?我尝试了一个循环,但我已经尝试过了,但它不起作用,因为对于第一个大if语句,我不使用数据[5,15,17,19,21],对于第二个大if语句,我不使用数据[6,14,16,18,20]@MSalters OP的问题是关于NN中的反向传播,几乎相同的if语句没有什么错,特别是因为它们并非都在所有条件下使用。非常感谢。这帮助了很多。我忘记了计算成本值,这帮助了很多。此外,您将我的代码缩短了整整600行,我也感谢您再一次
void Network::backProp(void)
{
    double b = 0,a;
    int loop,l;
    int inclusion1 [] = {0,1,2,3,4,6,7,8,9,10,11,12,13,14,16,18,20};
    int inclusion2 [] = {0,1,2,3,4,5,7,8,9,10,11,12,13,15,17,19,21};
    int j = 0;
    for(loop=0;loop<4;loop++)
    {
    //Adds up the cost of the data
        b = b + (pow(results[2*loop]-key[4*loop+2],2)+pow(results[2*loop+1]-key[4*loop+3],2));
    }
    a=.55*b;

    if(b>.01)
    {
        for(l=0;l<4;l++)
        {
            for(j=0;j<17;j++)
            {
                if(round(results[2*l])!=key[4*l+2])
                {
                    data[inclusion1[j]] = data[inclusion1[j]] - abs(data[inclusion1[j]])/data[inclusion1[j]]*a;
                }

                if(round(results[2*l+1])!=key[4*l+3])
                {
                    data[inclusion2[j]] = data[inclusion2[j]] + abs(data[inclusion2[j]])/data[inclusion2[j]]*a;
                }
            }
        }
    }
}
b = b + pow((pow(results[2*loop]-key[4*loop+2],2)+pow(results[2*loop+1]-key[4*loop+3],2)),1/2);