參照《python神經網路程式設計》寫乙個簡單的三層神經網路
#!/usr/bin/env python
# coding: utf-8
import numpy
# sigmoid 函式
import scipy.special
簡單的三層全連線網路,包括乙個輸入層,乙個隱層和乙個輸出層
損失函式用sigmoid
class neuralnetwork:
# 初始化方法
def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
# set number of nodes in each input, hidden, output layer
#輸入層節點數
self.inodes = inputnodes
#隱層節點數
self.hnodes = hiddennodes
#輸出層節點數
self.onodes = outputnodes
#輸入層和隱層的權重
self.wih = numpy.random.normal(0.0, pow(self.inodes, -0.5), (self.hnodes, self.inodes))
#隱層和輸出層的權重
self.who = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.onodes, self.hnodes))
# 學習率
self.lr = learningrate
# 損失函式用sigmoid
self.activation_function = lambda x: scipy.special.expit(x)
pass
# 前饋網路
def feedforward(self, inputs_list):
inputs = numpy.array(inputs_list, ndmin=2).t
# 點乘計算-輸入層到隱層的權重 點乘 輸入層輸入 等於隱層輸入
hidden_inputs = numpy.dot(self.wih, inputs)
#在隱層應用損失函式
hidden_outputs = self.activation_function(hidden_inputs)
# 點乘計算-隱層到輸出層的權重 點乘 隱層輸入 等於隱層輸出
final_inputs = numpy.dot(self.who, hidden_outputs)
#在輸出層應用損失函式
final_outputs = self.activation_function(final_inputs)
return hidden_outputs,final_outputs
# in[ ]:
# 訓練神經網路
def train(self, inputs_list, targets_list):
#先正向進行前饋網路
hidden_outputs,final_outputs = self.feedforward(self, inputs_list)
inputs = numpy.array(inputs_list, ndmin=2).t
targets = numpy.array(targets_list, ndmin=2).t
#計算最終誤差(目標值-實際值)
output_errors = targets - final_outputs
#更新隱層和輸出層的權重
self.who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 - final_outputs)), numpy.transpose(hidden_outputs))
# 隱藏層誤差 = 輸出層誤差點乘 隱層到輸出層的權重
hidden_errors = numpy.dot(self.who.t, output_errors)
#更新輸入層和隱層間的權重
self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), numpy.transpose(inputs))
pass
# **方法,**方法很簡單,直接進行前饋網路
def fit(self, inputs_list):
hidden_outputs,final_outputs = self.feedforward(inputs_list)
return final_outputs
#測試方法
input_nodes = 3
hidden_nodes = 3
output_nodes = 3
learning_rate = 0.3
n = neuralnetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)
inputs_list = [1.0, 0.5, -1.5]
final_outputs = n.fit(inputs_list)
print(final_outputs)
三層神經網路
import numpy as np defsigmoid x,deriv false if deriv true return x 1 x x是經過啟用函式後的 return1 1 np.exp x 前向傳播的值x np.array 0,0,1 0,1,1 1,0,1 1,1,1 0,0,1 標籤...
最簡單的三層神經網路Matlab實現
人工神經網路 artificial neural n etwork,ann 1 具有很廣的應用。理論上來說,採用多層的神經網路能夠逼近任何的連續函式,而不管該函式是否平滑。自從svm出現後,大家都快忘了還有ann這種東東。但是近幾年隨著deep learning技術的興起,大牛們又重新開始關注神經網...
從0實現三層神經網路
分享李沐老師關於深度學習的觀點 1 從實踐的角度入手深度學習可能比單純的研究演算法更好 2 如果想學習深度學習,要只用簡單的資料結構,譬如numpy ndarray,從0實現乙個深度學習演算法,這樣才能碰到進而解決深度學習中的許多核心問題,也可以更好的理解現在流行的框架 3 從應用的角度,那就直接上...