用純numpy實現一個簡單的神經網路(理解)
阿新 • • 發佈:2018-12-20
簡單的一個numpy神經網路示例:
import numpy as np class NeuralNetwork(): def __init__(self): #將權重轉換為3×1矩陣,其值從-1到1,平均值為0 self.synaptic_weights = 2 * np.random.random((3, 1)) - 1 def sigmoid(self, x): # 定義 sigmoid 函式 return 1 / (1 + np.exp(-x)) def sigmoid_derivative(self, x): # 計算Sigmoid函式的導數(用於反向傳播) return x * (1 - x) # 訓練 def train(self, training_inputs, training_outputs, training_iterations): # 訓練模型在不斷調整權重的同時進行準確預測 for iteration in range(training_iterations): # 訓練資料通過每一層網路節點 output = self.think(training_inputs) #反向傳播誤差率的計算 error = training_outputs - output # performing weight adjustments # 進行權重調整 adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output)) self.synaptic_weights += adjustments def think(self, inputs): # 通過神經元傳遞輸入以獲得輸出 # 將值轉換為浮點數 inputs = inputs.astype(float) output = self.sigmoid(np.dot(inputs, self.synaptic_weights)) return output if __name__ == "__main__": # 初始化神經元類 neural_network = NeuralNetwork() print("初始化權重: ") print(neural_network.synaptic_weights) # 4組訓練資料--3輸入1輸出 training_inputs = np.array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]]) training_outputs = np.array([[0, 1, 1, 0]]).T # 訓練 neural_network.train(training_inputs, training_outputs, 20000) print("訓練之後的權重: ") print(neural_network.synaptic_weights) user_input_one = str(input("輸入第一個資料: ")) user_input_two = str(input("輸入第二個資料: ")) user_input_three = str(input("輸入第三個資料: ")) print("輸入資料轉換", user_input_one, user_input_two, user_input_three) print("模型輸出: ") print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))