機器學習 BP神經網路演算法應用(上)

2021-08-08 09:24:42 字數 3280 閱讀 7876

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 每乙個神經單元都有一...