簡單隨機梯度下降演算法

2021-10-05 08:51:14 字數 1533 閱讀 2926

import numpy as np

import matplotlib as plt

import os

os.environ[

'tf_cpp_min_log_level']=

'2'x = np.arange(50)

#0~50

np.random.seed(1)

#每次生成的隨機數相同

randomarray =

(np.random.random(50)

*2-1

)*5y =

2*x + randomarray

x = x.reshape(50,

1)y = y.reshape(50,

1)all_data = np.concatenate(

(x, y)

, axis=1)

#拼接#劃分樣本為訓練集和測試集

np.random.shuffle(all_data)

#打亂資料集

train_data = all_data[:40

]test_data = all_data[40:

]#隨機梯度下降

#超引數

lr =

0.001

#學習率

n =100

epsilion =

200#引數

theta = np.random.rand(

)while

true

: np.random.shuffle(train_data)

for n in

range

(n):

#取隨機樣本

randint = np.random.randint(0,

20)rand_x = train_data[randint][0

] rand_y = train_data[randint][1

]#計算梯度

grad = rand_x *

(rand_x * theta - rand_y)

#更新theta

theta = theta - lr * grad

#計算更新theta後的錯誤率

x = train_data[:,

0]y = train_data[:,

1]loss = np.

sum(

0.5*

((theta * x - y)**2

))if loss < epsilion:

print

('number:'

, n,

'theta:'

, theta,

'loss:'

, loss)

break

執行結果:

number:

99 theta:

1.9906740352654155 loss:

195.6708811579648

可以看出來和預定的 y=2*x很接近了

隨機梯度下降演算法

bp神經網路是神經網路的基礎,其中可用隨機梯度下降演算法來加快更新權值和偏置,但是隨機梯度下降演算法總是忘記,下面來好好複習一下 們已經研究出很多梯度下降的變化形式,包括 些更接近真實模擬球體物理運動的變化形 式。這些模擬球體的變化形式有很多優點,但是也有 個主要的缺點 它最終必需去計算代價函式c的...

隨機梯度下降演算法

每次從從訓練樣本集上隨機抽取乙個小樣本集,求其 值和真實值誤差的平均值,作為目標函式,將引數沿著梯度的方向移動,從而使當前的目標函式減少得最多。小樣本集的個數為batch size,通常為2的冪次方,有利gpu加速 代價函式的總和為1m i 1m l x i y i dfrac sum ml x y...

梯度下降演算法 隨機梯度下降演算法scala實現

梯度下降和隨機梯度下降是機器學習中最常用的演算法之一。關於其具體的原理這裡不多做介紹,網路上可以很方便的找到。例如可以參考部落格 scala 實現如下 object sgd errorsum y row rowsum for col 0 until x 0 length loss 0.0 for r...