深度学习入门线性函数拟合前后传播过程

深度学习入门线性函数拟合前后传播过程 C++版本

c++源码

代码里面包涵了前向传播和反向传播的基本过程,对这一块的理解很有帮助,可以自己设置样本,通过观察成本,调整学习率和迭代次数。

#include <iostream>
using namespace std;
//y=3x+2
//a学习率,dw db为梯度,
int x[10]={0,1,2,3,4,5,6,7,8,9};
int y[10]={2,5,8,11,14,17,20,23,26,29};
int epoch=500;//迭代次数
int m=10;//样本数量
int main()
{ float w=1.0,b=1.0,a=0.01,dw=0,db=0,dwAll=0.0,dbAll=0.0,J=0;
   for(int i=0;i<epoch;i++)
   {
	   dwAll=0;
	   dbAll=0;
	   J=0;
	   for(int j=0;j<10;j++)
   {
	   dwAll+=2*(w*x[j]+b-y[j])*x[j];
	   dbAll+=2*(w*x[j]+b-y[j]);
	   J+=(w*x[j]+b-y[j])*(w*x[j]+b-y[j]);
   }
	   dw=dwAll/m;
	   db=dbAll/m;
	   J=J/m;
	   w=w-a*dw;
	   b=b-a*db;
	   cout<<"y="<<w<<"x+"<<b<<"   cost:"<<J<<endl;
   }
   return 0;
}

贴出最后几次w,b变化的结果

y=3.00012x+1.99927   cost:3.9881e-07
y=3.00012x+1.99928   cost:3.87233e-07
y=3.00011x+1.99929   cost:3.76572e-07
y=3.00011x+1.9993   cost:3.66034e-07
y=3.00011x+1.99931   cost:3.5567e-07
y=3.00011x+1.99932   cost:3.46122e-07
y=3.00011x+1.99933   cost:3.36539e-07
y=3.00011x+1.99934   cost:3.26613e-07
y=3.0001x+1.99935   cost:3.17665e-07
y=3.0001x+1.99936   cost:3.08892e-07
y=3.0001x+1.99937   cost:2.99917e-07
y=3.0001x+1.99937   cost:2.91569e-07
y=3.0001x+1.99938   cost:2.83226e-07
y=3.00009x+1.99946   cost:2.19096e-07

原理

在这里插入图片描述

这里的w,b最小值是可以直接求出来的,可是函数不同,求出来可能计算太大,甚至无法计算。具体可以看吴恩达老师的讲解。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值