神經網路 之 線性單元

2021-07-31 10:01:02 字數 3221 閱讀 2849

什麼是線性單元

有什麼用

**實現

線性單元和感知器的區別就是在啟用函式:

感知器的 f 是階越函式:

線性單元的啟用函式是線性的:

所以線性模型的公式如下:

感知器存在乙個問題,就是遇到線性不可分的資料時,就可能無法收斂,所以要使用乙個可導的線性函式來替代階躍函式,即線性單元,這樣就會收斂到乙個最佳的近似上。

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)

defget_training_dataset

():'''

捏造5個人的收入資料

'''# 構建訓練資料

# 輸入向量列表,每一項是工作年限

input_vecs = [[5], [3], [8], [1.4], [10.1]]

# 期望的輸出列表,月薪,注意要與輸入一一對應

labels = [5500, 2300, 7600, 1800, 11400]

return input_vecs, labels

deftrain_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])

學習資料:

推薦閱讀

歷史技術博文鏈結彙總

也許可以找到你想要的

線性神經網路 matlab神經網路

自適應線性元件20世紀50年代末由widrow和hoff提出,主要用於線性逼近乙個函式式而進行模式聯想以及訊號濾波 模型識別和控制等。線性神經網路和感知器的區別是,感知器只能輸出兩種可能的值,而線性神經網路的輸出可以取任意值。線性神經網路採用widrow hoff學習規則,即lms least me...

線性神經網路

線性神經網路 啟用函式為y x import numpy as np import matplotlib.pyplot as plt 輸入資料 x np.array 1,3,3 1,4,3 1,1,1 標籤y np.array 1,1,1 權值初始化,1行3列,取值範圍 1到1 w np.rando...

3 線性神經網路

由於單層感知器不能解決線性不可分的問題 在上篇文章對線性可分做了解釋 如異或問題,這時我們引入了新的結構 線性神經網路。線性神經網路與單層感知器的結構相似,只是它們的啟用函式不同,單層感知器的啟用函式只能輸出兩種可能值 1 或 1 而線性神經網路的輸出可以是任何取值,其啟用函式是線性函式 y x。l...