【機器學習筆記19】神經網路(單層感知機)
阿新 • • 發佈:2018-12-12
【參考資料】 【1】《人工神經網路教程》 【2】《matlab 2015b 神經網路技術》
基本概念
單層感知器可以看成一個線性累加器和一個二值化閾值元器件,通常會在累加一個偏移量。由公式表達為: 其中
實時上對於單層感知機而言,是根據輸入的x和o值,估計了引數w,而構築了一個的超平面。
單層感知機的模型相當於是求解n元線性非齊次方程的逆過程,前者是已知閾值和輸出求x,後者是已經輸入x和輸出y估計引數。在估計的判斷機制裡,神經網路是期望有更多的輸入樣本符合判斷,而支援向量機則是讓超片面與各個樣本點有最遠的距離。
基本學習演算法
此步驟描述只考慮一個輸出
第一步 初始化
對於$w_{1j}$
等所有權值賦予一個較小的隨機數
第二步 輸入訓練樣本
輸入訓練樣本$(x^p, d^p)$
,前者為輸入,後者為期望輸出
第三步 計算實際輸出
計算實際輸出
第四步 根據實際輸出與期望輸出的差值調整引數
調整權值引數,這裡$\eta$
又稱為學習率
第四步
重複步驟2,直到所有的樣本(滿足要求數量)都符合期望的輸出
程式碼實踐
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
def _test_signle_perceptron():
x_train = np.array([[-1, 1, -2, 0],[-1, 0, 1.5, -0.5],[-1, -1, 1, 0.5]], dtype=float);
y_train = np.array([[-1], [-1], [1]])
"""
Sequential 序貫模型是多個網路層的線性堆疊
"""
model = Sequential()
"""
Dense 為常用的全連線層,主要引數:
units:該層輸出的維度
input_dim:輸入的維度
activation:啟用函式
use_bias:是否有偏移量
"""
model.add(Dense(units=1, input_dim=4, activation='linear', use_bias=False))
#設定一個初始化的權值
model.set_weights([np.array([[0.5], [1], [-1], [0.]], dtype = float), np.array([0.], dtype=float)])
"""
compile 為編譯整個模型
loss 損失函式 mae 為mean_absolute_error
optimizer 優化器 SGD 為梯度下降法
metrics: 列表,顯示訓練時的一些效能指標
"""
model.compile(loss='mae',
optimizer='SGD',
metrics=['accuracy'])
"""
fit 為實際的訓練模型方法
epochs 訓練的輪數
batch_size 在做梯度下降時每次用到的樣本
"""
model.fit(x_train, y_train,
epochs=3,
batch_size=3)
print(model.get_weights())
"""
說明:
單層感知器線性模型,驗證《人工神經網路教程》例 3.2
這個例子主要是梳理Keras模型的基礎函式,對神經網路訓練本身意義不大:)
作者:fredric
日期:2018-8-18
"""
if __name__ == "__main__":
print("sigle perceptron test>>>>>>>>")
_test_signle_perceptron()