本文主要是介绍梯度下降算法步长和收敛条件的设置的一些看法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在上一篇中介绍了梯度下降算法,还是利用了上面的那个x^2+y^2的例子,来求解下,代码如下:
function [] = gradient(step, threadhold)
%在这里主要是演示对z=x^2+y^2的用梯度下降算法
%设置x和y的初始值%
x = 100;
y = 100;
%先计算前两个步骤的值
last_step_result = x*x + y*y;
x = x - step*2*x;
y = y - step*2*y;
this_step_result = x^2 + y^2;%设置最大迭代次数%
max_count = 1000000000;
index = 0;
while (abs(this_step_result -last_step_result) >threadhold) && (index < max_count)%计算此时的结果%current_dx = 2*x;current_dy = 2*y;%计算新的x和yx = x - step*current_dx;y = y - step*current_dy;%计算此时的z的值,并且交换last_step_result = this_step_result;this_step_result = x*x + y*y; index = index + 1;
end%跳出循环判断结果
if index >= max_countfprintf('超过最大迭代次数%i,并且没有找到符合收敛条件的值程序退出\n', index);
endif abs(this_step_result - last_step_result) <= threadholdfprintf
这篇关于梯度下降算法步长和收敛条件的设置的一些看法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!