小批量梯度下降演算法 python

2021-08-16 21:49:46 字數 1888 閱讀 5990

# -*- coding: utf-8 -*-

"""created on tue mar 13 20:49:03 2018

@author:

"""import numpy as np

from scipy import stats

import matplotlib.pyplot as plt

##產生訓練資料,生成模型為2*x+5+random.randint(50)

x=np.arange(0.,10.,0.2)

m=len(x)

print(m)

x0=np.full(m,1.0)

input_data=np.vstack([x0,x]).t

target_data=2*input_data[:,1]+5*input_data[:,0]+np.random.randn(m)

loop_max=100000 #設定最大訓練次數,防止程式死迴圈

epsilon=1e-3 # 設定訓練模型容許誤差

np.random.seed(0) #設定隨機產生種子,讓每次生成隨機數一致

theta=np.random.randn(2) # 初始化訓練模型的權重

alpha=0.001 #訓練速度(太大容易導致欠擬合,太小容易導致模型不收斂)

diff=0.

error = np.zeros(2) #初始化模型誤差

count=0 #統計模型迴圈次數

finish=0 #模型訓練截止標誌

minibatch_size=5            #小批量取樣間隔(也可以每次只取樣這幾個資料)

while countcount+=1

for i in range(1,m,minibatch_size):

sum_m=np.zeros(2)

k=np.random.randint(0,49) # 隨機選取資料更新模型權重

dif=(np.dot(theta,input_data[k])-target_data[k])*input_data[k]

sum_m=sum_m+dif

theta=theta-alpha*(1.0/minibatch_size)*sum_m

##跳出迴圈條件

if np.linalg.norm(theta-error)finish=1

break

else:

error=theta

print('loopcount=%d' %count, '\tw:', theta)

print('loop count=%d' %count,'\tw:',theta)

#根據python scipy 庫中stats線性擬合函式來驗證模型的正確性

slope, intercept, r_value, p_value,slope_std_error = stats.linregress(x, target_data)  

print ('intercept = %s slope = %s'% (intercept, slope) )

#畫出訓練資料與擬合的模型圖
plt.plot(x, target_data, 'g*')
plt.plot(x, theta[1]* x +theta[0],'r')  

plt.show()

批量梯度下降,隨機梯度下降,小批量梯度下降

在機器學習領域中,梯度下降的方式有三種,分別是 批量梯度下降法bgd 隨機梯度下降法sgd 小批量梯度下降法mbgd,並且都有不同的優缺點。下面我們以線性回歸演算法 也可以是別的演算法,只是損失函式 目標函式 不同而已,它們的導數的不同,做法是一模一樣的 為例子來對三種梯度下降法進行比較。假設 特徵...

小批量梯度下降演算法步驟 優化演算法之梯度下降演算法

在應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。1.批量梯度下降法bgd 現在下面以lr演算法為例對這三種演算法從原理到 進行講解 由lr演算法可知lr演算法的損失函式為 損失函式j 最小值時的 則...

小批量梯度下降演算法步驟 梯度下降演算法原理及推導

今天我們就來介紹用來優化代價函式的梯度下降演算法 gradient descent algorithm 1 原理 那梯度下降究竟為何方神聖?我來用最通俗的語言來介紹下 假設你站在華山之巔,你現在想以最快速度下山,那你肯定是找一條最陡峭的路走。你環顧四周,找到了一條路線,恩,這個方向是最陡的。於是你就...