1. 程式人生 > >神經網絡之線性單元

神經網絡之線性單元

輸出 bing from self clas 圖片 near 線性 nal

本文結構:

  1. 什麽是線性單元
  2. 有什麽用
  3. 代碼實現

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



神經網絡之線性單元