python实现随机梯度下降(SGD)

 更新时间:2020年03月24日 11:51:45   作者:芳草碧连天lc  
这篇文章主要为大家详细介绍了python实现随机梯度下降SGD,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

使用神经网络进行样本训练,要实现随机梯度下降算法。这里我根据麦子学院彭亮老师的讲解,总结如下,(神经网络的结构在另一篇博客中已经定义):

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函数根据你传入的一些数据进行更新神经网络的权重和偏置。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python对DICOM图像的读取方法详解

    python对DICOM图像的读取方法详解

    DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052)。下面这篇文章主要给大家介绍了关于python对DICOM图像读取的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • python numpy中对ndarry按照index增删改查

    python numpy中对ndarry按照index增删改查

    这篇文章主要介绍了python numpy中对ndarry按照index增删改查,在numpy中的ndarry是一个数组,因此index就是位置下标,注意下标是从0开始,接下来一起进入下面文章了解详细内容吧
    2022-02-02
  • Django 浅谈根据配置生成SQL语句的问题

    Django 浅谈根据配置生成SQL语句的问题

    今天小编就为大家分享一篇Django 浅谈根据配置生成SQL语句的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python 提取html文本的方法

    python 提取html文本的方法

    在解决自然语言处理问题时,有时你需要获得大量的文本集。互联网是文本的最大来源,但是从任意HTML页面提取文本是一项艰巨而痛苦的任务。本文将讲述python高效提取html文本的方法
    2021-05-05
  • python清除字符串里非数字字符的方法

    python清除字符串里非数字字符的方法

    这篇文章主要介绍了python清除字符串里非数字字符的方法,涉及Python使用re模块正则替换操作字符串的技巧,需要的朋友可以参考下
    2015-07-07
  • Python 中如何使用 setLevel() 设置日志级别

    Python 中如何使用 setLevel() 设置日志级别

    这篇文章主要介绍了在 Python 中使用setLevel() 设置日志级别,Python 提供了一个单独的日志记录模块作为其标准库的一部分,以简化日志记录,本文将讨论日志记录 setLevel 及其在 Python 中的工作方式,需要的朋友可以参考下
    2023-07-07
  • 在CMD命令行中运行python脚本的方法

    在CMD命令行中运行python脚本的方法

    今天小编就为大家分享一篇在CMD命令行中运行python脚本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • matlab、python中矩阵的互相导入导出方式

    matlab、python中矩阵的互相导入导出方式

    这篇文章主要介绍了matlab、python中矩阵的互相导入导出方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 5个Python使用F-String进行格式化的实用技巧分享

    5个Python使用F-String进行格式化的实用技巧分享

    F-String(格式化字符串字面值)是在Python 3.6中引入的,它是一种非常强大且灵活的字符串格式化方法,本文总结了5个实用的F-String技巧,相信一定能让你的代码输出更加的美观,快跟随小编一起学习起来吧
    2024-03-03
  • python怎么调用自己的函数

    python怎么调用自己的函数

    在本篇文章里小编给大家分享了关于python调用自己的函数的实例方法,有兴趣的朋友们可以学习参考下。
    2020-07-07

最新评论