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值會使索引以及索引的...