mse優化方法(四) adarm

2021-10-12 02:37:30 字數 1785 閱讀 7367

import numpy as np

# 匯入動畫包

import matplotlib.animation as animation

data = np.array([

[80,200],

[95,230],

[104,245],

[112,247],

[125,259],

[135,262]

])# 兩個陣列記錄m和b的變化過程

mhistroy=

bhistroy=

# 記錄mse的變化過程

msehistory=

weight =np.ones((2,1)) # m和b 採用矩陣的方式指定權重

ones = np.ones((len(data),1))

feature = np.hstack((data[:,0:1],ones))

label = data[:,1:2]

learningrate = 0.1

m = np.zeros((2,1)) # 記錄的mse對m和b變化率的慣性

v = np.zeros((2,1)) # 記錄的mse對m和b變化率的速度

def grandentdecent3():

global weight,m,v,learningrate

# 計算mse

mse = np.sum(np.square(np.dot(feature,weight)-label))

# 計算slop

slop = np.dot(feature.t,(np.dot(feature,weight)-label))

## adam的核心邏輯

beta_1 = 0.9

beta_2 = 0.999

m = beta_1*m +(1-beta_1)*slop

v = beta_2*v +(1-beta_2)*(slop**2)

m_p = m/(1-beta_1)

v_p = v/(1-beta_2)

weight = weight - learningrate*m_p/np.sqrt(v_p+0.000000001)

for i in range(50000):

grandentdecent7()

## 以動畫的方式展示m和b收斂的過程

%matplotlib notebook

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(6,6),dpi=60)

plt.xlim(0,5)

plt.ylim(0,130)

axis_name, = plt.plot(mhistroy[0:100],bhistroy[0:100],c='r')

plt.annotate("goal",xy=(1.0859,122.68), xytext=(+10, +15),

textcoords='offset points', fontsize=12,

arrowprops=dict(arrowstyle="->"))

def update(num):

axis_name.set_data(mhistroy[0:num*100],bhistroy[0:num*100])

animation.funcanimation(fig,update,np.arange(0,501),interval=20,repeat=false)

mse優化方法(三) rmsprop

import numpy as np 匯入動畫包 import matplotlib.animation as animation data np.array 80,200 95,230 104,245 112,247 125,259 135,262 兩個陣列記錄m和b的變化過程 mhistroy ...

機器學習總結(四) 最優化方法

機器學習中所謂的訓練其實就是損失函式的優化過程,求損失函式的最優化解,主要是得靠一些常規套路,去一點一點地接近最優化目標。常用的有梯度下降法 牛頓法和擬牛頓法 共軛梯度法 啟發式優化方法 拉格朗日乘數法等。一 梯度下降法 gradient descent 梯度下降法實現的原理簡單,是最常用最簡單的最...

MySQL優化四(優化表結構)

昨晚吃吃喝喝的太多,熬夜到凌晨二點。今天頭髮雜亂,臉龐憔悴,像是吸毒了。下午去買衣服,肚子一看大了不少。奈何女朋友還沒有乙個,就已經發福了。管不住口,邁不開腿。一 優化表結構 1.盡量將表字段定義為not null約束,這時由於在mysql中含有空值的列很難進行查詢優化,null值會使索引以及索引的...