用Python+numpy实现单隐层神经网络
来源:互联网 发布:100兆访客网络限速多少 编辑:程序博客网 时间:2024/05/18 14:25
利用矩阵运算,快速实现单隐层,sigmoid激活函数BP神经网络,下面是源码
# -*- coding:utf-8 -*-import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasetsclass bpNN: def __init__(self, numH, numO, learning_rate, n_iteration): self.numH = numH self.numO = numO self.learning_rate = learning_rate self.n_iteration = n_iteration self.weight_H = 0 self.b_H = 0 self.weight_O = 0 self.b_O = 0 def __ini_weight_b(self, x): #初始化权重和偏置 w1 = np.random.random([self.numH, x.shape[0]]) * 0.01 b1 = np.zeros([self.numH, 1]) w2 = np.random.random([self.numO, self.numH]) * 0.01 b2 = np.zeros([self.numO, 1]) return w1, b1, w2, b2 def sigmoid(self, value): #sigmoid函数 y = 1.0 / (1 + np.exp(-value)) return y def z_a(self, x): #计算隐层z1 = w1x + b1, a1 = sigmoid(z1), 输出层z2 = w2a1 + b2, a2 = sigmoid(z2) z1 = np.dot(self.weight_H, x) + self.b_H.repeat(x.shape[1]).reshape(self.numH, x.shape[1]) a1 = self.sigmoid(z1) z2 = np.dot(self.weight_O, a1) + self.b_O.repeat(x.shape[1]).reshape(self.numO, x.shape[1]) a2 = self.sigmoid(z2) return z1, a1, z2, a2 def fit(self, x, y): #训练函数, BP误差传递主体 self.weight_H, self.b_H, self.weight_O, self.b_O = self.__ini_weight_b(x) for i in range(self.n_iteration): z1, a1, z2, a2 = self.z_a(x) dz2 = (a2 - y) dw2 = np.dot(dz2, a1.T) db2 = dz2.sum(axis=1).reshape(self.numO,1) da1 = np.dot(self.weight_O.T, dz2) dz1 = da1 * (a1 - a1**2) dw1 = np.dot(dz1, x.T) db1 = dz1.sum(axis=1).reshape(self.numH,1) self.weight_H = self.weight_H - self.learning_rate * dw1 self.b_H = self.b_H - self.learning_rate * db1 self.weight_O = self.weight_O - self.learning_rate * dw2 self.b_O = self.b_O - self.learning_rate * db2 def predict(self, x): #预测函数 z1, a1, z2, a2 = self.z_a(x) return a2;X, y = datasets.make_moons(200, noise=0.2) #产生训练集plt.figure(1) #训练集图像plt.scatter(X[:, 0], X[:, 1], s=40, c=y, cmap=plt.cm.Spectral)train_X = np.array(X).TbpNN = bpNN(8, 1, 0.01, 50000)bpNN.fit(train_X, y)predict_y = np.floor(bpNN.predict(train_X) * 1.99999)plt.figure(2) #用训练集预测图像plt.scatter(X[:, 0], X[:, 1], s=40, c=predict_y, cmap=plt.cm.Spectral)x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5h = 0.01xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))Z = np.floor(bpNN.predict(np.c_[xx.ravel(), yy.ravel()].T) * 1.99999)Z = Z.reshape(xx.shape)plt.figure(3) #预测分界图像plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral)plt.show()
阅读全文
1 0
- 用Python+numpy实现单隐层神经网络
- Python使用numpy实现BP神经网络
- 循环神经网络教程-第二部分 用python numpy theano实现RNN
- 循环神经网络教程第二部分-用python,numpy,theano实现一个RNN
- 循环神经网络在Python 、Numpy和Theano中的实现
- Python实现单隐层神经网络
- 循环神经网络教程2-用Python、numpy和Theano实现RNNPart 2 – Implementing a RNN with Python, Numpy and Theano
- 用python实现BP神经网络
- 从零开始用python实现神经网络
- 用python实现一个神经网络
- 用Python 代码实现简单的神经网络
- 从头到尾用Python实现一个深度神经网络
- 神经网络python 实现
- BP神经网络Python实现
- BP神经网络python实现
- 神经网络python实现
- 使用Python实现神经网络
- python实现神经网络
- windows 下wav采集音频
- Redis集群启动异常
- 2.5 有序表
- Android studio 设置自动换行
- 单片机汇编延时程序的理解
- 用Python+numpy实现单隐层神经网络
- 第三周项目4---顺序表应用(1)
- C#——选择排序
- 连续子数组的最大和
- 数路径
- 浪曦_Struts2应用开发系列_第2讲.Struts2的类型转换-学习笔记
- Keepalived中Master和Backup角色选举策略
- 高阶函数(二)
- scala 继承2