深度学习笔记一:BP神经网络的介绍和Python代码实现(2)
2017-12-13 15:21
966 查看
1.以下代码的编写语言采用Python3.5版本,编译环境采用Anaconda,这里数据集通过sklearn生成,这个数据集大小为(1797,64),表示的是有1797张图片样本,其中的64,表示的是每一个样本包含64个特征,也就是下述图片所示,将8*8的矩阵排成一行,即64列,下面实现生成一个图片上数字的识别功能:
显示结果如下:
2.完整的bp实现代码如下:
# coding: utf-8
import numpy as np
from sklearn.datasets import load_digits
from sklearn.preprocessing import LabelBinarizer
from sklearn.cross_validation import train_test_split
def sigmoid(x):
return 1/(1+np.exp(-x))
def dsigmoid(x):
return x*(1-x)
class NeuralNetwor
4000
k:
def __init__(self,layers):#(64,100,10)
#权值的初始化,范围-1到1
self.V = np.random.random((layers[0]+1,layers[1]+1))*2-1
self.W = np.random.random((layers[1]+1,layers[2]))*2-1
def train(self,X,y,lr=0.11,epochs=10000):
#添加偏置
temp = np.ones([X.shape[0],X.shape[1]+1])
temp[:,0:-1] = X
X = temp
for n in range(epochs+1):
i = np.random.randint(X.shape[0]) #随机选取一个数据
x = [X[i]]
x = np.atleast_2d(x)#转为2维数据
L1 = sigmoid(np.dot(x,self.V))#隐层输出
L2 = sigmoid(np.dot(L1,self.W))#输出层输出
L2_delta = (y[i]-L2)*dsigmoid(L2)
L1_delta= L2_delta.dot(self.W.T)*dsigmoid(L1)
self.W += lr*L1.T.dot(L2_delta)
self.V += lr*x.T.dot(L1_delta)
#每训练1000次预测一次准确率
if n%1000==0:
predictions = []
for j in range(X_test.shape[0]):
o = self.predict(X_test[j])
predictions.append(np.argmax(o))#获取预测结果
#这里equal()函数的功能是,当其传入的参数相等时,返回1,否则返回0
accuracy = np.mean(np.equal(predictions,y_test))
print('epoch:',n,'accuracy:',accuracy)
def predict(self,x):
#添加偏置
temp = np.ones(x.shape[0]+1)
temp[0:-1] = x
x = temp
x = np.atleast_2d(x)#转为2维数据
L1 = sigmoid(np.dot(x,self.V))#隐层输出
L2 = sigmoid(np.dot(L1,self.W))#输出层输出
return L2
digits = load_digits()#载入数据
X = digits.data#数据
y = digits.target#标签
#输入数据归一化
X -= X.min()
X /= X.max()
nm = NeuralNetwork([64,100,10])#创建网络
X_train,X_test,y_train,y_test = train_test_split(X,y) #分割数据1/4为测试数据,3/4为训练数据
labels_train = LabelBinarizer().fit_transform(y_train)#标签二值化 0,8,6 0->1000000000 3->0001000000
labels_test = LabelBinarizer().fit_transform(y_test)#标签二值化
print('start')
nm.train(X_train,labels_train,epochs=20000)
print('end')
显示结果如下:
显示结果如下:
2.完整的bp实现代码如下:
# coding: utf-8
import numpy as np
from sklearn.datasets import load_digits
from sklearn.preprocessing import LabelBinarizer
from sklearn.cross_validation import train_test_split
def sigmoid(x):
return 1/(1+np.exp(-x))
def dsigmoid(x):
return x*(1-x)
class NeuralNetwor
4000
k:
def __init__(self,layers):#(64,100,10)
#权值的初始化,范围-1到1
self.V = np.random.random((layers[0]+1,layers[1]+1))*2-1
self.W = np.random.random((layers[1]+1,layers[2]))*2-1
def train(self,X,y,lr=0.11,epochs=10000):
#添加偏置
temp = np.ones([X.shape[0],X.shape[1]+1])
temp[:,0:-1] = X
X = temp
for n in range(epochs+1):
i = np.random.randint(X.shape[0]) #随机选取一个数据
x = [X[i]]
x = np.atleast_2d(x)#转为2维数据
L1 = sigmoid(np.dot(x,self.V))#隐层输出
L2 = sigmoid(np.dot(L1,self.W))#输出层输出
L2_delta = (y[i]-L2)*dsigmoid(L2)
L1_delta= L2_delta.dot(self.W.T)*dsigmoid(L1)
self.W += lr*L1.T.dot(L2_delta)
self.V += lr*x.T.dot(L1_delta)
#每训练1000次预测一次准确率
if n%1000==0:
predictions = []
for j in range(X_test.shape[0]):
o = self.predict(X_test[j])
predictions.append(np.argmax(o))#获取预测结果
#这里equal()函数的功能是,当其传入的参数相等时,返回1,否则返回0
accuracy = np.mean(np.equal(predictions,y_test))
print('epoch:',n,'accuracy:',accuracy)
def predict(self,x):
#添加偏置
temp = np.ones(x.shape[0]+1)
temp[0:-1] = x
x = temp
x = np.atleast_2d(x)#转为2维数据
L1 = sigmoid(np.dot(x,self.V))#隐层输出
L2 = sigmoid(np.dot(L1,self.W))#输出层输出
return L2
digits = load_digits()#载入数据
X = digits.data#数据
y = digits.target#标签
#输入数据归一化
X -= X.min()
X /= X.max()
nm = NeuralNetwork([64,100,10])#创建网络
X_train,X_test,y_train,y_test = train_test_split(X,y) #分割数据1/4为测试数据,3/4为训练数据
labels_train = LabelBinarizer().fit_transform(y_train)#标签二值化 0,8,6 0->1000000000 3->0001000000
labels_test = LabelBinarizer().fit_transform(y_test)#标签二值化
print('start')
nm.train(X_train,labels_train,epochs=20000)
print('end')
显示结果如下:
相关文章推荐
- 深度学习笔记一:BP神经网络的介绍和Python代码实现(1)
- 深度学习-BP神经网络(python3代码实现)
- Coursera deeplearning.ai 深度学习笔记1-2-Neural Network Basics-逻辑回归原理推导与代码实现
- [原创]java WEB学习笔记83:Hibernate学习之路---双向 1-n介绍,关键点解释,代码实现,set属性介绍(inverse,cascade ,order-by )
- 神经网络与深度学习笔记(三)python 实现反向传播算法
- Coursera deeplearning.ai 深度学习笔记4-2-Deep Convolutional Models Case Studies-深度卷积模型案例及代码实现
- 深度学习论文-神经网络的代码实现(python版本)
- 机器学习经典 PRML 最新 Python 代码实现,附最全 PRML 笔记视频学习资料
- 神经网络与深度学习笔记(二)python 实现随机梯度下降
- Coursera deeplearning.ai 深度学习笔记4-1-Foundations of Convolutional Neural Networks-卷积神经网络基础及代码实现
- [深度学习]Python/Theano实现逻辑回归网络的代码分析
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例详细介绍
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例详细介绍(转载)
- 机器学习与神经网络(四):BP神经网络的介绍和Python代码实现
- 吴恩达 深度学习第三周 浅层神经网络 logistic_regression python代码实现
- Coursera deeplearning.ai 深度学习笔记2-2-Optimization algorithms-优化算法与代码实现
- Coursera deeplearning.ai 深度学习笔记2-1-Practical aspects of deep learning-神经网络实际问题分析(初始化&正则化&训练效率)与代码实现
- Coursera deeplearning.ai 深度学习笔记1-3-Shallow Neural Networks-浅层神经网络原理推导与代码实现
- python 机器学习算法实现 深度学习笔记
- Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现