前言
搭建一个简单二分类神经网络。
一个简单的三层网络,包括输入层,隐层,输出层。反向传播迭代更新。
软件:PyCharm
Python version:3.7
代码
import numpy as np
class NeuralNetwork:
def __init__(self):
pass
##实现sigmode函数,同时通过True/False 来分别返回sigmode函数的导数和函数
def sigmode(self, x, deriv=False):
if deriv:
return x * (1 - x)
else:
return 1 / (1 + np.exp(-x))
##开始训练,train_num训练次数
def train(self, x, y, train_num):
learn_rate = 1
##两层参数,随机生成
self.w0 = 2 * np.random.random((x.shape[1], 4)) - 1
self.w1 = 2 * np.random.random((4, 1)) - 1
for i in range(train_num):
##前向传播
layer0 = x
layer1 = self.sigmode(np.dot(layer0, self.w0))
layer2 = self.sigmode(np.dot(layer1, self.w1))
##反向传播
layer2_error = y - layer2
layer2_delta = layer2_error * self.sigmode(layer2, True)
layer1_error = layer2_delta.dot(self.w1.T)
layer1_delta = layer1_error * self.sigmode(layer1, True)
self.w1 += learn_rate * layer1.T.dot(layer2_delta)
self.w0 += learn_rate * layer0.T.dot(layer1_delta)
##测试
def result(self, test):
return np.round(self.sigmode(np.dot(self.sigmode(np.dot(test, self.w0)), self.w1)))