GD python 含詳細注釋 ,最速下降法

2021-09-20 06:20:40 字數 1990 閱讀 8623

包括三部分,**(這裡w設定為矩陣,方便大家理解矩陣更新),最速下降意義(如何求得更新公式),具體例子

最速下降和隨機梯度下降是一樣一樣的,餵入的資料隨機的就是隨機梯度下降

當然最速梯度下降和隨機梯度下降很有點區別的,最速梯度下降學習率使用了線性搜尋armji法則(這裡不再詳細分析)

1.最速梯度下降法的含義或意義

**的例子

!!!!!!注意,w的初始化一定初值不能全一樣,如果初值全一樣,那麼更新過程就完全一樣了,w的多維就完全失去意義了

**

import numpy as np

import random

seed = 1

def sgd(x, y, w, alpha, m , max_iteration):

"""隨機梯度下降法:stochastic_gradient_descent

:param x:train_data

:param y:train_label

:param w:初始化權重

:param alpha:學習速率

:param m:

:param max_iteration:迭代次數

:return:

"""data = list(range(4))

for i in range(0, max_iteration):

index = random.sample(data, 1)[0] # 從data列表中隨機選取乙個數,sgd 隨機梯度下降,隨機就是體現在這個地方,其實順序餵入也是隨機的一種

z = y[index]

print z.shape

hypothesis = np.dot(x[index], w) # 計算神經網路的輸出(無啟用函式),前向傳播過程

print hypothesis.shape

print z.shape

loss = hypothesis - z # 損失函式

# 下降梯度

# print z.shape

# print loss.shape

temp = np.mat(x[index])

print temp.shape

loss=np.reshape(loss, (1, -1))

gradient = np.dot(temp.t, loss)#損失函式是吳恩大上的 損失函式: 1/2 ×(y- y(x))**2 導數就是 : (y-y(x)) *x  !!!注意這裡是對 w 求導, x 是常數 

# 求導之後得到theta

w = w - alpha * gradient

return w

def main():

train_data = np.array([[1, 4, 2], [2, 5, 3], [5, 1, 6], [4, 2, 8]])

train_label = np.array([[19 ,12],[26, 14],[19,15],[20,16]] )

# [[19 ,12],[26, 14],[19,15],[20,16]]

m, n = np.shape(train_data) # 讀取矩陣的長度,shape[0]就是讀取矩陣第一維度的長度

rdm = np.random.randomstate(seed)#生成偽隨機數,seed是初始化數

#如果輸入 label ,變成 4行兩列 , w 就變成 3行兩列了

w = rdm.rand(n,2) #初始化 權重 w

max_iteration = 500 # 迭代次數

alpha = 0.01 # 學習速率

w = sgd(train_data, train_label, w, alpha, m, max_iteration)

print(w)

if __name__ == "__main__":

main()

C語言關於建立動態鍊錶(含詳細注釋)

關於建立動態鍊錶,首先我們要知道要為新建節點動態申請儲存單元,讓指標變數指向這個新建節點,然後再將新建節點新增到鍊錶中。在這裡插入 片 include include define len sizeof struct link 預定義利用sizeof得出len的長度 struct link int ...

knn詳細注釋python

from numpy import import operator as opt 對資料集進行規範化 defnormdata dataset maxvals dataset.max axis 0 求出一列的最大值 minvals dataset.min axis 0 求出一列的最小值 ranges ...

快排歸併排模板(含略詳細的填坑注釋說明)

include using namespace std void quicksort int arr,int low,int high void mergesort int a,int l,int r,int b int main int b 10 mergesort nums,0,9,b for ...