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 隱含層輸入...