神經網絡之線性單元
阿新 • • 發佈:2018-09-30
輸出 bing from self clas 圖片 near 線性 nal
本文結構:
- 什麽是線性單元
- 有什麽用
- 代碼實現
1. 什麽是線性單元
線性單元和感知器的區別就是在激活函數:
感知器的 f 是階越函數:
線性單元的激活函數是線性的:
所以線性模型的公式如下:
2. 有什麽用
感知器存在一個問題,就是遇到線性不可分的數據時,就可能無法收斂,所以要使用一個可導的線性函數來替代階躍函數,即線性單元,這樣就會收斂到一個最佳的近似上。
3. 代碼實現
1. 繼承Perceptron,初始化線性單元
from perceptron import Perceptron #定義激活函數f f = lambda x: x class LinearUnit(Perceptron): def __init__(self, input_num): ‘‘‘初始化線性單元,設置輸入參數的個數‘‘‘ Perceptron.__init__(self, input_num, f)
2. 定義一個線性單元, 調用 train_linear_unit
進行訓練
- 打印訓練獲得的權重
- 輸入參數值 [3.4] 測試一下預測值
if __name__ == ‘__main__‘: ‘‘‘訓練線性單元‘‘‘ linear_unit = train_linear_unit() # 打印訓練獲得的權重 print linear_unit # 測試 print ‘Work 3.4 years, monthly salary = %.2f‘ % linear_unit.predict([3.4]) print ‘Work 15 years, monthly salary = %.2f‘ % linear_unit.predict([15])print ‘Work 1.5 years, monthly salary = %.2f‘ % linear_unit.predict([1.5]) print ‘Work 6.3 years, monthly salary = %.2f‘ % linear_unit.predict([6.3])
- 其中訓練的過程就是:
- 獲得訓練數據,
- 設定叠代次數,學習速率等參數
- 再返回訓練好的線性單元
def train_linear_unit(): ‘‘‘ 使用數據訓練線性單元 ‘‘‘ # 創建感知器,輸入參數的特征數為1(工作年限) lu = LinearUnit(1) # 訓練,叠代10輪, 學習速率為0.01 input_vecs, labels = get_training_dataset() lu.train(input_vecs, labels, 10, 0.01) #返回訓練好的線性單元 return lu
完整代碼
from perceptron import Perceptron #定義激活函數f f = lambda x: x class LinearUnit(Perceptron): def __init__(self, input_num): ‘‘‘初始化線性單元,設置輸入參數的個數‘‘‘ Perceptron.__init__(self, input_num, f) def get_training_dataset(): ‘‘‘ 捏造5個人的收入數據 ‘‘‘ # 構建訓練數據 # 輸入向量列表,每一項是工作年限 input_vecs = [[5], [3], [8], [1.4], [10.1]] # 期望的輸出列表,月薪,註意要與輸入一一對應 labels = [5500, 2300, 7600, 1800, 11400] return input_vecs, labels def train_linear_unit(): ‘‘‘ 使用數據訓練線性單元 ‘‘‘ # 創建感知器,輸入參數的特征數為1(工作年限) lu = LinearUnit(1) # 訓練,叠代10輪, 學習速率為0.01 input_vecs, labels = get_training_dataset() lu.train(input_vecs, labels, 10, 0.01) #返回訓練好的線性單元 return lu if __name__ == ‘__main__‘: ‘‘‘訓練線性單元‘‘‘ linear_unit = train_linear_unit() # 打印訓練獲得的權重 print linear_unit # 測試 print ‘Work 3.4 years, monthly salary = %.2f‘ % linear_unit.predict([3.4]) print ‘Work 15 years, monthly salary = %.2f‘ % linear_unit.predict([15]) print ‘Work 1.5 years, monthly salary = %.2f‘ % linear_unit.predict([1.5]) print ‘Work 6.3 years, monthly salary = %.2f‘ % linear_unit.predict([6.3])
學習資料:
https://www.zybuluo.com/hanbingtao/note/448086
神經網絡之線性單元