我正在尝试用levenberg marquardt
Java编写,这是我的代码:
while (iter <= 10 || mse < 0.0001) {
call.calc_jacobian(ff, trainlm, input, akt1, akt2, w, x, t);
double[][] jacobian = trainlm.ret_jacob();
double[][] error = trainlm.ret_err();
mse = trainlm.ret_mse() / 4;
mse_all[iter] = mse;
test: for (int m = 0; m <= 5; m++) {
upb.koreksi_w(miu, hidden, jacobian, error, w);
double[][] w_new = upb.ret_upw();
call.test_ff(ff, trainlm, input, akt1, akt2, w_new, x, t);
double mse2 = trainlm.ret_mse() / 4;
if (mse2 < mse || m == 5) {
miu = miu / beta;
w_skrg = w_baru;
iter++;
break test;
} else {
miu = miu * beta;
}
}
}
该函数calc_jacobian
是我用来计算前馈和反向传播操作以计算雅可比值的函数。该函数koreksi_w
用于使用 Jacobian、error、miu 和实际重量来更新新的重量,它会给出一个新的重量并test_ff
计算前馈以获得mse
值。
我的问题是,当我尝试运行这些代码时,mse 的值并没有减少,所以我使用trainlm
函数 inmatlab
以相同的输入和权重运行,以证明输入和重量不是问题,并且matlab
在mse
减少。