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
0
投稿

猜你喜欢

  • ASP生成数字相加求和的BMP图片验证码

    2011-04-14 10:48:00
  • CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)

    2023-11-21 21:42:33
  • 修改mysql最大连接数的方法

    2010-03-09 13:57:00
  • python游戏测试工具自动化遍历游戏中所有关卡

    2021-10-05 13:03:20
  • 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
  • Python matplotlib画曲线例题解析

    2022-10-18 14:17:30
  • Python使用re模块验证危险字符

    2023-10-29 13:46:55
  • 初识Firebug 全文 — firebug的使用

    2007-10-23 12:54:00
  • 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
  • asp之家 网络编程 m.aspxhome.com