bp神經網路

2021-09-29 09:58:09 字數 2244 閱讀 5593

import numpy as np

def tanh(x):

return np.tanh(x)

def tan_deriv(x):

return 1.0 - np.tanh(x) * np.tan(x)

def logistic(x):

return 1 / (1 + np.exp(-x))

def logistic_derivative(x):

return logistic(x) * (1 - logistic(x))

class neuralnetwork:

definit(self, layers, activation=『tanh』):

「」"神經網路演算法建構函式

:param layers: 神經元層數

:param activation: 使用的函式(預設tanh函式)

:return:none

「」"if activation == 『logistic』:

self.activation = logistic

self.activation_deriv = logistic_derivative

elif activation == 『tanh』:

self.activation = tanh

self.activation_deriv = tan_deriv

# 權重列表

self.weights =

# 初始化權重(隨機)

for i in range(1, len(layers) - 1):

def fit(self, x, y, learning_rate=0.2, epochs=10000):

"""訓練神經網路

:param x: 資料集(通常是二維)

:param y: 分類標記

:param learning_rate: 學習率(預設0.2)

:param epochs: 訓練次數(最大迴圈次數,預設10000)

:return: none

"""# 確保資料集是二維的

x = np.atleast_2d(x)

temp = np.ones([x.shape[0], x.shape[1] + 1])

temp[:, 0: -1] = x

x = temp

y = np.array(y)

for k in range(epochs):

# 隨機抽取x的一行

i = np.random.randint(x.shape[0])

# 用隨機抽取的這一組資料對神經網路更新

a = [x[i]]

# 正向更新

for l in range(len(self.weights)):

error = y[i] - a[-1]

deltas = [error * self.activation_deriv(a[-1])]

# 反向更新

for l in range(len(a) - 2, 0, -1):

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

nn = neuralnetwork([2, 2, 2], 『tanh』)

temp = [[0, 0], [0, 1], [1, 0], [1, 1]]

x = np.array(temp)

y = np.array([[0,1],[0, 1],[1, 1],[2, 0]])

nn.fit(x, y)

for i in temp:

print(i, nn.predict(i))

BP神經網路

基本bp神經網路演算法包括 訊號的前向傳播 誤差的反向傳播 也即計算實際輸出時按照輸入到輸出的方向進行,權值閾值調整則相反。bp是一種多層前饋神經網路,由輸入層 隱含層和輸出層組成。層與層之間有兩種訊號在流動 一種是從輸入流向輸出的工作訊號,是輸入和權值的函式 另一種是輸入流向輸出的訊號,即誤差。隱...

BP神經網路

x 為輸入向量,y為隱藏層的神經元,z 為輸出層,d為目標真實值,本文預設 z 不經過sigmod處理。x y的權重為 w,y z的權重為 v yj ix iwij 1 oyi f y j 2 其中激勵函式f x 1 1 e x f x f x 1 f x 3 z k j f yj vjk 此時系統...

BP神經網路

bp是back propagation bp神經網路主要的演算法在於誤差反向傳播error backpropagation 有三層 輸入層 input 隱含層 hidden 輸出層 output 輸入層 n個神經元 隱含層 p個神經元 輸出層 q個神經元 輸入向量 x x1,x2,x n 隱含層輸入...