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...