我做了一个随机 NN,但变化太大,所以我想去做一批,但是,据我尝试,我无法得到可接受的结果,我不明白我什么时候完成了转发如何组合数据以更新权重。
有一个输入层,一个隐藏层和一个输出层。
现在,我尝试将所有增量加在一起并对它们进行平均,但结果很差。这是我一个时代的随机版本。
for( np = 1 ; np <= numPattern ; np++) { /* repeat for all the training patterns */
p = ranpat[np];
for( j = 1 ; j <= numHid ; j++ ) { /* compute hidden unit activations */
SumH[p][j] = WeightIH[0][j] ;
for( i = 1 ; i <= numIn ; i++ ) {
SumH[p][j] += allData[p].in[i] * WeightIH[i][j] ;
}
Hidden[p][j] = 1.0/(1.0 + exp(-SumH[p][j])) ;
}
for( k = 1 ; k <= numOut ; k++ ) { /* compute output unit activations and errors */
SumO[p][k] = WeightHO[0][k] ;
for( j = 1 ; j <= numHid ; j++ ) {
SumO[p][k] += Hidden[p][j] * WeightHO[j][k] ;
}
Output[p][k] = 1.0/(1.0 + exp(-SumO[p][k])) ; /* Sigmoidal Outputs*/
Error -= ( allData[p].out[k] * log( Output[p][k] ) + ( 1.0 - allData[p].out[k] ) * log( 1.0 - Output[p][k] ) ) ; /*Cross-Entropy Error*/
DeltaO[k] = allData[p].out[k] - Output[p][k]; /* Sigmoidal Outputs, Cross-Entropy Error */
}
for( j = 1 ; j <= numHid ; j++ ) { /* 'back-propagate' errors to hidden layer */
SumDOW[j] = 0.0 ;
for( k = 1 ; k <= numOut ; k++ ) {
SumDOW[j] += WeightHO[j][k] * DeltaO[k] ;
}
DeltaH[j] = SumDOW[j] * Hidden[p][j] * (1.0 - Hidden[p][j]) ;
}
for( j = 1 ; j <= numHid ; j++ ) { /* update weights WeightIH */
DeltaWeightIH[0][j] = eta * DeltaH[j];
WeightIH[0][j] += DeltaWeightIH[0][j] ;
for( i = 1 ; i <= numIn ; i++ ) {
DeltaWeightIH[i][j] = eta * allData[p].in[i] * DeltaH[j];
WeightIH[i][j] += DeltaWeightIH[i][j] ;
}
}
for( k = 1 ; k <= numOut ; k ++ ) { /* update weights WeightHO */
DeltaWeightHO[0][k] = eta * DeltaO[k];
WeightHO[0][k] += DeltaWeightHO[0][k] ;
for( j = 1 ; j <= numHid ; j++ ) {
DeltaWeightHO[j][k] = eta * Hidden[p][j] * DeltaO[k];
WeightHO[j][k] += DeltaWeightHO[j][k] ;
}
}
}