python实现随机梯度下降(SGD)
作者:芳草碧连天lc 时间:2021-04-15 19:41:20
使用神经网络进行样本训练,要实现随机梯度下降算法。这里我根据麦子学院彭亮老师的讲解,总结如下,(神经网络的结构在另一篇博客中已经定义):
def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
if test_data:
n_test = len(test_data)#有多少个测试集
n = len(training_data)
for j in xrange(epochs):
random.shuffle(training_data)
mini_batches = [
training_data[k:k+mini_batch_size]
for k in xrange(0,n,mini_batch_size)]
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta)
if test_data:
print "Epoch {0}: {1}/{2}".format(j, self.evaluate(test_data),n_test)
else:
print "Epoch {0} complete".format(j)
其中training_data是训练集,是由很多的tuples(元组)组成。每一个元组(x,y)代表一个实例,x是图像的向量表示,y是图像的类别。
epochs表示训练多少轮。
mini_batch_size表示每一次训练的实例个数。
eta表示学习率。
test_data表示测试集。
比较重要的函数是self.update_mini_batch,他是更新权重和偏置的关键函数,接下来就定义这个函数。
def update_mini_batch(self, mini_batch,eta):
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
for x,y in mini_batch:
delta_nabla_b, delta_nable_w = self.backprop(x,y)#目标函数对b和w的偏导数
nabla_b = [nb+dnb for nb,dnb in zip(nabla_b,delta_nabla_b)]
nabla_w = [nw+dnw for nw,dnw in zip(nabla_w,delta_nabla_w)]#累加b和w
#最终更新权重为
self.weights = [w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)]
self.baises = [b-(eta/len(mini_batch))*nb for b, nb in zip(self.baises, nabla_b)]
这个update_mini_batch函数根据你传入的一些数据进行更新神经网络的权重和偏置。
来源:http://blog.csdn.net/leichaoaizhaojie/article/details/56840328
标签:python,梯度下降,SGD
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
ASP生成数字相加求和的BMP图片验证码
2011-04-14 10:48:00
![](https://img.aspxhome.com/file/UploadPic/20112/5/201125111945909s.jpg)
CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)
2023-11-21 21:42:33
![](https://img.aspxhome.com/file/2023/6/63136_0s.jpg)
修改mysql最大连接数的方法
2010-03-09 13:57:00
python游戏测试工具自动化遍历游戏中所有关卡
2021-10-05 13:03:20
![](https://img.aspxhome.com/file/2023/9/93589_0s.png)
python匿名函数的使用方法解析
2022-05-08 13:00:25
如何提高ASP的效率?
2010-06-07 20:52:00
mysql使用LOAD语句批量录入数据
2010-03-18 16:19:00
Debugging JavaScript:throw与console
2008-08-29 17:03:00
如何在独立服务器上创建用户?
2010-06-18 19:59:00
asp GetString的用法
2008-06-12 13:46:00
pdo中使用参数化查询sql
2023-07-20 21:11:21
浅析设计与内容呈现的关系
2009-08-06 18:12:00
![](https://img.aspxhome.com/file/UploadPic/20098/6/011-700x530-51s.png)
Python matplotlib画曲线例题解析
2022-10-18 14:17:30
![](https://img.aspxhome.com/file/2023/4/86324_0s.png)
Python使用re模块验证危险字符
2023-10-29 13:46:55
初识Firebug 全文 — firebug的使用
2007-10-23 12:54:00
![](https://img.aspxhome.com/file/UploadPic/200710/23/2007102313756216s.gif)
python 监测内存和cpu的使用率实例
2022-07-03 23:49:49
JavaScript数据结构中串的表示与应用实例
2023-08-26 10:38:38
也谈access数据库的防下载保护
2007-08-28 13:01:00
HTML在线编辑器的原理分析(整理)
2007-12-22 10:25:00
如何使用图片精灵优化你的网站
2009-07-21 11:35:00
![](https://img.aspxhome.com/file/UploadPic/20097/21/how_to_image_sprites-95s.jpg)