梯度下降訓練引數w,b

2021-09-29 16:08:21 字數 1771 閱讀 4617

import numpy as np

#1取樣資料

data = #儲存樣本集的列表

for i in range(100):#迴圈取樣100個點

x = np.random.uniform(-10,10)#隨機取樣輸入x

# 取樣高斯雜訊

eps = np.random.normal(0.,0.1)

#得到模型的輸出

y = 1.477*x +0.089 +eps

data = np.array(data)#轉換為2維陣列

print(data)

#2計算誤差

def mse(b,w,points):

#根據當前的w,b引數計算軍方差損失

totalerror = 0

for i in range(0,len(points)):#迴圈迭代所有點

x = points[i,0]# 獲得i號店的輸入x

y = points[i,1]# 獲得i號點的輸出y

totalerror+=(y-(w*x+b))**2

return totalerror/float(len(points))#得到均方差

#3,計算梯度

def step_gradient(b_current,w_current,points,lr):

#計算誤差函式在所有點上的導數,並更新w,b

b_gradient = 0

w_gradient =0

m = float(len(points))

for i in range(0,len(points)):

x = points[i,0]

y=points[i,1]

b_gradient +=(2/m)*((w_current*x+b_current)-y)

w_gradient += (2/m) * x*((w_current*x+b_current) - y)

#根據梯度下降演算法更新w,b,lr為xuexilv

new_b = b_current -(lr*b_gradient)

new_w = w_current -(lr * w_gradient)

return [new_b,new_w]

#梯度更新

def gradient_descent(points,starting_b,starting_w,lr,num_iterations):

b = starting_b

w = starting_w

for step in range(num_iterations):

b,w = step_gradient(b,w,np.array(points),lr)

loss = mse(b,w,points)

if step%50 == 0:

print("iteration:{},loss:{},w:{},b:{}".format(step,loss,w,b))

return [b,w]

def main():

lr = 0.01

initial_b=0

initial_w = 0

num_iterations = 1000

[b,w] = gradient_descent(data,initial_b,initial_w,lr,num_iterations)

loss = mse(b,w,data)

print("final loss:{},w:{},b:{}".format(loss,w,b))

梯度下降 隨機梯度下降 批梯度下降

下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...

梯度下降 隨機梯度下降和批量梯度下降

對比梯度下降和隨機梯度下降和批量梯度下降 之前看的知識比較零散,沒有乙個系統的解釋說明,看了一些網上的博主的分析,總結了一下自己的理解。例子這裡我參照其他博主的例子做了一些修改,首先是梯度下降 coding utf 8 import random this is a sample to simula...

stanford 梯度 梯度下降,隨機梯度下降

一 梯度gradient 在標量場f中的一點處存在乙個向量g,該向量方向為f在該點處變化率最大的方向,其模也等於這個最大變化率的數值,則向量g稱為標量場f的梯度。在向量微積分中,標量場的梯度是乙個向量場。標量場中某一點上的梯度指向標量場增長最快的方向,梯度的長度是這個最大的變化率。更嚴格的說,從歐氏...