1、關於非線性轉化方程(non-linear transformation function)
sigmoid函式(s曲線)用來作為activation function
(1)雙曲函式(tanh function)
雙曲函式的導數:
(2)邏輯函式(logistic function)
邏輯函式的導數:
2、利用python實現簡單的神經網路演算法
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zhengzhengliu
import numpy as np
#定義雙曲函式
def tanh(x):
return np.tanh(x)
#定義雙曲函式的導數
def tanh_deriv(x):
return 1.0 - np.tanh(x)*np.tanh(x)
#定義邏輯函式
def logistic(x):
return 1 / (1 + np.exp(-x))
#定義邏輯函式的導數
def logistic_deriv(x):
return logistic(x) * (1 - logistic(x))
class neuralnetwork:
# 建構函式,self引數:指向當前類的指標,相當於c++裡面的this指標
def __init__(self,layers,activation='tanh'):
''':param layers: a list containing the number of units in each layer
(用乙個列表包含每層的神經單元個數)should be at least two values
:param activation:the activation function to be used,can be 'logistic' or 'tanh'
非線性轉化函式,在不指明時,預設情況下採用tanh
'''if activation == 'logistic':
self.activation = logistic #將當前的非線性轉化函式賦值給前面定義的logistic函式
self.activation_deriv = logistic_deriv
elif activation == 'tanh':
self.activation = tanh
self.activation_deriv = tanh_deriv
self.weights = #定義乙個列表存放權重weight
#迴圈從1開始,相當於以第二層為基準,進行權重weight的初始化
for i in range(1,len(layers)-1):
#對當前神經結點的前續賦值
#對當前神經結點的後續賦值
#訓練函式,x:訓練集(二維矩陣),每行對應乙個例項,每列對應例項特徵值維度
#y:函式對例項進行分類的標記(class label),learning_rate為學習率,epochs:抽樣的方法對神經網路進行更新的最大次數
def fit(self,x,y,learning_rate = 0.2,epochs = 10000):
x = np.atleast_2d(x) #確定x至少是二維資料
temp = np.ones([x.shape[0],x.shape[1]+1]) #初始化元素全為1的矩陣,行數與x相同,列數比x多1
temp[:,0:-1] = x #取x所有行,第1列至倒數第2列,進行偏向的賦值
x = temp
y = np.array(y) #將分類標記由list轉換成numpy陣列
for k in range(epochs): #抽樣梯度下降epochs抽樣
#隨機抽取一行,對神經網路進行更新
# randint生成指定範圍的整數,從x的行數(例項)中隨機取乙個整數:即隨機取一行,隨機取乙個例項
i = np.random.randint(x.shape[0])
a = [x[i]] #隨機從x中取乙個例項
#完成所有的正向更新
for l in range(len(self.weights)):
# dot:內積,對應例項的值與權重乘積再求和,最後進行非線性轉化
error = y[i] - a[-1] #對於頂層,y[i]:真實的分類標記值,a[-1]:最後一層**的分類標記值
deltas = [error*self.activation_deriv(a[-1])] #輸出層誤差
#開始反向計算誤差,更新權重
for l in range(len(a)-2,0,-1): #從最後一層到第2層倒著迴圈
deltas.reverse()
for i in range(len(self.weights)):
layer = np.atleast_2d(a[i])
delta = np.atleast_2d(deltas[i]) #權重更新
self.weights[i] += learning_rate*layer.t.dot(delta)
#**函式
def predict(self,x):
x = np.array(x)
temp = np.ones(x.shape[0]+1)
temp[0:-1] = x
a = temp
for l in range(0,len(self.weights)):
a = self.activation(np.dot(a,self.weights[l]))
return a
機器學習 BP神經網路模型
bp back propagation 網路是1986年由rumelhart和mccelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。bp網路能學習和存貯大量的輸入 輸出模式對映關係,而無需事前揭示描述這種對映關係的數學方程。它的學習規...
機器學習 BP神經網路模型
bp back propagation 網路是1986年由rumelhart和mccelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。bp網路能學習和存貯大量的輸入 輸出模式對映關係,而無需事前揭示描述這種對映關係的數學方程。它的學習規...
BP神經網路演算法
bp神經網路是一種基於有監督的學習,使用非線性可導函式作為傳遞函式的前饋神經網路。一 模型 bp神經網路由輸入層 隱含層 輸出層組成。訓練過程分為網路輸入訊號正向傳播和誤差訊號反向傳播,按有監督學習方式進行訓練。1 相鄰層之間結點的連線有乙個權重wij,其值在 1,1 之間 2 每乙個神經單元都有一...