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

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

本文主要介绍随机梯度下降SGD在python中的实现。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

利用神经网络进行样本训练,需要实现随机梯度下降算法。在此,根据小麦所彭亮老师给出的解释,我总结如下(神经网络的结构已在另一篇博客中定义):

def SGD(self,training_data,epochs,mini_batch_size,eta,test_data=None):

如果测试数据:

N_test=len(test_data)#有多少个测试集?

n=len(training_data)

对于xrange中的j(历元):

random.shuffle(训练数据)

mini_batches=[

training _ data[k:k mini _ batch _ size]

对于xrange(0,n,mini_batch_size)中的k]

对于迷你批处理中的迷你批处理:

self . update _ mini _ batch(mini _ batch,eta)

如果测试数据:

打印“纪元{0}: {1}/{2}”。格式(j,自我评估(测试数据),n _测试)

否则:

打印“纪元{0}完成”。格式(j)

Training_data是训练集,由很多元组组成。每个元组(x,y)代表一个实例,x是图像的矢量表示,y是图像的类别。

时代意味着多少轮训练。

Mini_batch_size表示每个培训会话中的实例数量。

Eta表示学习速度。

Test_data表示测试集。

更重要的函数是self.update_mini_batch,这是更新权重和偏移量的关键函数。接下来,定义这个函数。

def update_mini_batch(self,mini_batch,eta):

nab la _ b=[自偏差中b的NP . zeros(b . shape)]

nab la _ w=[自重中w的NP . zeros(w . shape)]

对于mini_batch中的x,y:

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=[nwdnw 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函数根据你传入的一些数据来更新神经网络的权值和偏置。

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: