For loop 为什么这个for循环中的fminunc每次都给出相同的结果?

For loop 为什么这个for循环中的fminunc每次都给出相同的结果?,for-loop,optimization,runtime,octave,gradient,For Loop,Optimization,Runtime,Octave,Gradient,我尝试在for循环中多次运行“fminunc” 代码的一部分: P = 0.70 ; idx = randperm(m); X_Training = X(idx(1:round(P*m)),:); X_Testing = X(idx(round(P*m)+1:end),:); y_Traning = y(idx(1:round(P*m)),:); y_Testing = y(idx(round(P*m)+1:end),:); s = 100; border_all

我尝试在for循环中多次运行“fminunc”

代码的一部分:

P = 0.70 ;
idx = randperm(m);
X_Training = X(idx(1:round(P*m)),:); 
X_Testing = X(idx(round(P*m)+1:end),:);
y_Traning = y(idx(1:round(P*m)),:);
y_Testing = y(idx(round(P*m)+1:end),:);

s             = 100;
border_all    = zeros( 2, s );
lambda        = 1;
accuracy      = 0;
initial_theta = zeros( n + 1, 1 );
options       = optimset( 'GradObj', 'on', 'MaxIter', 400 );

for i = 1 : 1 : s
    [theta, J, exit_flag] = fminunc( @(t) costFunctionReg( t, X_Training, y_Traning, lambda ), initial_theta, options );

    for border = 0.01 : 0.01 : 1
        p          = predict( theta, X_Testing, border );
        accuracy_t = mean( double( p == y_Testing ) ) * 100;

        if accuracy_t > accuracy
            accuracy      = accuracy_t;
            border_result = border;
        endif
    endfor

    border_all(1, i) = border_result;
    border_all(2, i) = accuracy;
endfor
我稍后使用“θ”的输出值来检查不同的变化变量“I”(对于I=1:1:s…)。 每次运行脚本时,都会计算“theta”,但在其他“for循环”迭代中它不会改变。然而,在每次迭代中都应该有所不同

同时,当我重新运行脚本时,我得到了新的“θ”值。因此,它似乎只是在第一次迭代时从头开始计算,而不是在其他迭代时。也许是内存问题。尝试了“清除”功能,但结果相同


有人遇到过同样的问题吗?

如果有人在谷歌上搜索类似问题,请将评论线程转换为答案:

这是因为一旦您进入for循环,
fminunc
的输入就再也不会改变,因此您实际上总是使用相同的输入调用它,从而获得相同的输出

将代码段顶部的随机初始化移动到for循环中,每次都会得到不同的输出,正如您所希望的那样


亲爱的乌拉,不清楚你在问什么。如果没有复制问题的演示代码,您可能会问很多问题,而问题可能存在于许多地方。请阅读并尝试编辑您的问题,使其更具体、更负责。不过,要回答您的一般问题,是的,只要您每次在循环中使用不同的参数调用fminunc,您就应该期望每次的输出在很大程度上是不同的。如果不是,那么你在某个地方有一个bug;border_all=0(2,s);λ=1;准确度=0;初始θ=零(n+1,1);options=optimset('GradObj','on','MaxIter',400);对于i=1:1:s[theta,J,exit_flag]=fminunc(@(t)(costFunctionReg(t,X_训练,y_训练,lambda)),初始_theta,选项);对于边界=0.01:0.01:1,p=预测(θ,X_检验,边界);准确度t=平均值(双倍(p==y检验))*100;如果(精度>精度)精度=精度;边界\结果=边界;endif endfor border_all(1,i)=border_结果;border_all(2,i)=准确度;endforI希望启动fminunc 100次,并检查每次迭代的逻辑回归的最佳边界值(从0.1到1)。然而,θ和J对于所有100次迭代都是相同的(在第一次迭代后不要改变)。它们必须是不同的。你评论中的代码,放在你的问题中。这将使人们能够研究和回答它。然而,从快速查看来看,在我看来,您在迭代过程中并没有更改fminunc的任何参数。当然,它每次都会输出相同的结果。还有一些打字错误(
y\u Traning
),但我怀疑这是主要问题。完成,问题中的代码。是的,我不更改fminunc的任何参数。因此,问题是如何在一个会话中使用相同的参数多次调用fminunc,从而在每次迭代中计算θ和J。现在,fminunc只在我再次启动脚本时计算θ和J的新值。