1. 程式人生 > 其它 >梯度下降求函式最小值C++樣例

梯度下降求函式最小值C++樣例

技術標籤:跟我一起學《深度學習》深度學習機器學習演算法人工智慧神經網路

強力推薦大家閱讀《深度學習的數學》一書,日本作家所寫(通俗易懂),可當作課外讀物閱讀

#include<iostream>
#include<cmath>
using namespace std;
//梯度下降求最小值
//以函式z=x^4+y^2,為例子 
//算出偏導,梯度向量
//x:4x^3  y:2y 梯度向量為 (4x^3,2y) 
int main(void){
	 double n=0.001;//步長選0.1
	 //我們要選一個點,作為起點
	 double start_x=-5.0,start_y=-5.0
; //梯度 double grade_x=4*(start_x*start_x*start_x); double grade_y=2*start_y; //位移向量 double dx=-n*grade_x; double dy=-n*grade_y; while(fabs(dx)>0.00001||fabs(dy)>0.00001){ //更新位置 start_x=start_x+dx; start_y=start_x+dy; //計算位移向量 dx=-n*3*(start_x*start_x); dy=-n*2*start_y; //計算函式值 //std::cout<<"min-value is "<<start_x*start_x*start_x*start_x+start_y*start_y<<std::endl;
cout<<start_x<<","<<start_y<<endl; if(!(fabs(start_x)>0.01&&fabs(start_y)>0.01)){ cout<<0<<","<<0<<endl; break; } } if(!(fabs(start_x)>0.01&&fabs(start_y)>0.01)){ cout<<0<<","
<<0<<endl; } return 0; }