首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用java询问step by step levenberg-marquardt

用java询问step by step levenberg-marquardt
EN

Stack Overflow用户
提问于 2013-05-21 12:19:22
回答 1查看 654关注 0票数 1

我正在尝试用Java语言编写levenberg marquardt,下面是我的代码:

代码语言:javascript
复制
    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使用雅可比、误差、miu和实际权重更新新的权重,它将给出一个新的权重,并通过test_ff计算前馈来获得mse值。

我的问题是,当我尝试运行这些代码时,mse的值并没有减少,所以我使用matlab中的trainlm函数在相同的输入和权重下运行,以证明输入和鬼魂不是问题,而在matlab中,mse减少了。

EN

回答 1

Stack Overflow用户

发布于 2013-05-21 12:49:45

我不明白你的代码,但是你确定你想要的是Integer division吗?

代码语言:javascript
复制
mse = trainlm.ret_mse() / 4;  //OR:
double mse2 = trainlm.ret_mse() / 4;

正如你所期望的那样,我会建议演员阵容或类似这样的东西:

代码语言:javascript
复制
double mse2 = trainlm.ret_mse() / (double)4; //OR:
double mse2 = trainlm.ret_mse() / 4.0;

还要检查miu = miu / beta; ( beta是double吗?)

我怀疑MathLab做了浮点除法,而java没有...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16662087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档