博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
随机梯度下降法的调试
阅读量:4550 次
发布时间:2019-06-08

本文共 1308 字,大约阅读时间需要 4 分钟。

对于随机梯度法的调试,主要是对于损失函数的梯度的计算准确度的判断,即函数中关于各个参数偏导数DJ的计算,主要有两种方式:数学公式计算:利用多元函数的偏导计算,确定出其DJ的向量;(2)导数定义逼近法:利用逼近的方式进行各个参数偏导数的计算

 

其不同两种方式代码实现如下所示: import numpy as np import matplotlib.pyplot as plt #多元线性回归中使用梯度下降法来求得损失函数的最小值 np.random.seed(666) x=np.random.random(size=(1000,10)) ture_y=np.arange(1,12,dtype=float) x_b=np.hstack([np.ones((len(x),1)),x]) print(ture_y) y=x_b.dot(ture_y)+np.random.normal(size=1000) print(x.shape) print(y.shape) #1使用梯度下降法训练 def J1(theta,x_b,y):         return np.sum((y-x_b.dot(theta))**2)/len(x_b) def DJ2(theta,x_b,y):     res=np.empty(len(theta))     res[0]=np.sum(x_b.dot(theta)-y)     for i in range(1,len(theta)):         res[i]=np.sum((x_b.dot(theta)-y).dot(x_b[:,i]))     return res*2/len(x_b) 多元函数偏导数的计算方式
#1-1数学公式法
def DJmath(theta, x_b, y):     return x_b.T.dot(x_b.dot(theta)-y)*2/len(y)
#1-2导数定义逼近法(各种函数都适用)
def DJdebug(theta, x_b, y,ep=0.0001):     res = np.empty(len(theta))     for f in range(len(theta)):         theta1=theta.copy()         theta1[f]=theta1[f]+ep         theta2 = theta.copy()         theta2[f] = theta2[f]-ep         res[f]=(J1(theta1,x_b,y)-J1(theta2,x_b,y))/(2*ep)     return res def gradient_descent1(dj,x_b,y,eta,theta_initial,erro=1e-8, n=1e4):     theta=theta_initial     i=0     while i

 

 

转载于:https://www.cnblogs.com/Yanjy-OnlyOne/p/11315033.html

你可能感兴趣的文章
C++设计模式之工厂方法模式
查看>>
poj3984_bfs+回溯路径
查看>>
MyEclipse使用技巧
查看>>
[译]径向镜片反畸变滤波
查看>>
畅通工程-最小生成树+并查集
查看>>
top命令输出解释以及load average 详解及排查思路
查看>>
Ajax的封装
查看>>
Java传入参数个数不确定可用(Type ... values)
查看>>
POJ 2081
查看>>
记录下zend studio 的xdebug 在调试安装
查看>>
ES6阅读笔记
查看>>
数字基带信号分类
查看>>
移动HTML5前端性能优化指南(转)
查看>>
Jq 遍历each()方法
查看>>
Android源码分析:Telephony部分–phone进程
查看>>
关于 redis.properties配置文件及rule
查看>>
WebService
查看>>
关于Java中重载的若干问题
查看>>
Java中start和run方法的区别
查看>>
23种设计模式中的命令模式
查看>>