深度学习--TensorFlow (2)单层感知器2 -- 实现多数据分类
生活随笔
收集整理的這篇文章主要介紹了
深度学习--TensorFlow (2)单层感知器2 -- 实现多数据分类
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
一、基礎(chǔ)理論
前向傳遞(得到輸出y)?
反向傳遞(更新權(quán)重w)
二、實(shí)現(xiàn)多數(shù)據(jù)分類
1、設(shè)置初始參數(shù)?
2、訓(xùn)練
3、畫(huà)圖
3-1、畫(huà)點(diǎn)?
3-2、畫(huà)線段
總代碼
一、基礎(chǔ)理論
這里只寫(xiě)公式,更加詳細(xì)的可以看前篇CSDN
前向傳遞(得到輸出y)?
(b是偏置)?
反向傳遞(更新權(quán)重w)更新權(quán)重:?
二、實(shí)現(xiàn)多數(shù)據(jù)分類
1、設(shè)置初始參數(shù)?
# 1、設(shè)置初始參數(shù)
# 輸入 #每一行對(duì)應(yīng)一個(gè)標(biāo)簽
x = np.array([[1, 0, 2], #(0,2)坐標(biāo)[1, 1, 3], #(1,3)坐標(biāo)[1, 4, 2], #(4,2)坐標(biāo)[1, 5, 1] #(5,1)坐標(biāo)
])
# 初始權(quán)重(0~1的隨機(jī)生產(chǎn)數(shù))
w = np.random.random([3, 1]) #3行1列# 偏置
b = 1# 標(biāo)簽(正確標(biāo)簽,訓(xùn)練結(jié)束的目標(biāo))
true = np.array([ #每一行對(duì)應(yīng)一個(gè)標(biāo)簽[-1],[-1],[ 1],[ 1]
])# 學(xué)習(xí)率
lr = 1
2、訓(xùn)練
注:dot是矩陣點(diǎn)乘,矩陣點(diǎn)乘要注意前者列與后者行是否相等。?
# 開(kāi)始訓(xùn)練
for i in range(100):# 2、正向傳播:計(jì)算輸出yy = np.sign(np.dot(x, w)).astype(int) #dot:矩陣乘法(x列==w行)print('epoch:', i) #迭代次數(shù)print('weight:', w) #權(quán)重print(y) #標(biāo)簽# 訓(xùn)練成功if (y == true).all():print('訓(xùn)練成功!')print('y = ', y)break# 3、反向傳播:更新權(quán)重# 訓(xùn)練失敗(更新權(quán)重)else:w += lr * np.dot(x.T, true-y)/x.shape[0]
# w:權(quán)重 lr:學(xué)習(xí)率 np.dot:矩陣點(diǎn)乘 true-y:差 x.T:x的轉(zhuǎn)置 x.shape[0]:行數(shù)
3、畫(huà)圖
3-1、畫(huà)點(diǎn)?
# 4、畫(huà)圖
# 4-1、畫(huà)點(diǎn)
# 正樣本坐標(biāo)
x1, y1 = [0,1], [2,3] #坐標(biāo):(0,2), (1,3)
# 負(fù)樣本坐標(biāo)
x2, y2 = [4,5], [2,1] #坐標(biāo):(4,2),(5,1)plt.scatter(x1, y1, c='b') #點(diǎn):(x1,y1)坐標(biāo),blue顏色
plt.scatter(x2, y2, c='g') #點(diǎn):(x2,y2)坐標(biāo),green顏色
3-2、畫(huà)線段
# 4-2、畫(huà)線段
# 定義線段兩點(diǎn)的x坐標(biāo)
line_x = (0, 6)# 計(jì)算線性方程的k和d:
# w0*x0+w1*x1+w2*x2 = 0
# 把x1、x2分別看作:x、y
# 可以得到:w0 + w1*x + w2*y = 0 --> y = -w1/w2*x + -w0/w2 --> k=-w1/w2, d=-w0/w2
# 線段兩端點(diǎn)的y坐標(biāo)
k = -w[1]/w[2] #斜率
d = -w[0]/w[2] #截距
line_y = k * line_x + d #y坐標(biāo)#畫(huà)線段(通過(guò)兩個(gè)點(diǎn))
plt.plot(line_x, line_y, 'r') #r:redplt.show()
總代碼
# 手寫(xiě)單層感知器(多數(shù)據(jù)分類)
import numpy as np
import matplotlib.pyplot as plt# 1、設(shè)置初始參數(shù)
# 輸入 #每一行對(duì)應(yīng)一個(gè)標(biāo)簽
x = np.array([[1, 0, 2], #(0,2)坐標(biāo)[1, 1, 3], #(1,3)坐標(biāo)[1, 4, 2], #(4,2)坐標(biāo)[1, 5, 1] #(5,1)坐標(biāo)
])
# 初始權(quán)重(0~1的隨機(jī)生產(chǎn)數(shù))
w = np.random.random([3, 1]) #3行1列# 偏置
b = 1# 標(biāo)簽(正確標(biāo)簽,訓(xùn)練結(jié)束的目標(biāo))
true = np.array([ #每一行對(duì)應(yīng)一個(gè)標(biāo)簽[-1],[-1],[ 1],[ 1]
])# 學(xué)習(xí)率
lr = 1# 開(kāi)始訓(xùn)練
for i in range(100):# 2、正向傳播:計(jì)算輸出yy = np.sign(np.dot(x, w)).astype(int) #dot:矩陣乘法(x列==w行)print('epoch:', i) #迭代次數(shù)print('weight:', w) #權(quán)重print(y) #標(biāo)簽# 訓(xùn)練成功if (y == true).all():print('訓(xùn)練成功!')print('y = ', y)break# 3、反向傳播:更新權(quán)重# 訓(xùn)練失敗(更新權(quán)重)else:w += lr * np.dot(x.T, true-y)/x.shape[0]
# w:權(quán)重 lr:學(xué)習(xí)率 np.dot:矩陣點(diǎn)乘 true-y:差 x.T:x的轉(zhuǎn)置 x.shape[0]:行數(shù)# 4、畫(huà)圖
# 4-1、畫(huà)點(diǎn)
# 正樣本坐標(biāo)
x1, y1 = [0,1], [2,3] #坐標(biāo):(0,2), (1,3)
# 負(fù)樣本坐標(biāo)
x2, y2 = [4,5], [2,1] #坐標(biāo):(4,2),(5,1)plt.scatter(x1, y1, c='b') #點(diǎn):(x1,y1)坐標(biāo),blue顏色
plt.scatter(x2, y2, c='g') #點(diǎn):(x2,y2)坐標(biāo),green顏色# 4-2、畫(huà)線段
# 定義線段兩點(diǎn)的x坐標(biāo)
line_x = (0, 6)# 計(jì)算線性方程的k和d:
# w0*x0+w1*x1+w2*x2 = 0
# 把x1、x2分別看作:x、y
# 可以得到:w0 + w1*x + w2*y = 0 --> y = -w1/w2*x + -w0/w2 --> k=-w1/w2, d=-w0/w2
# 線段兩端點(diǎn)的y坐標(biāo)
k = -w[1]/w[2] #斜率
d = -w[0]/w[2] #截距
line_y = k * line_x + d #y坐標(biāo)#畫(huà)線段(通過(guò)兩個(gè)點(diǎn))
plt.plot(line_x, line_y, 'r') #r:redplt.show()
總結(jié)
以上是生活随笔為你收集整理的深度学习--TensorFlow (2)单层感知器2 -- 实现多数据分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 深度学习--TensorFlow (1)
- 下一篇: 深度学习--TensorFlow(3)线