【DL--22】实现神经网络算法NeuralNetwork以及手写数字识别

2024-09-07 07:08

本文主要是介绍【DL--22】实现神经网络算法NeuralNetwork以及手写数字识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.NeuralNetwork.py

#coding:utf-8import numpy as np#定义双曲函数和他们的导数
def tanh(x):return np.tanh(x)def tanh_deriv(x):return 1.0 - np.tanh(x)**2def logistic(x):return 1/(1 + np.exp(-x))def logistic_derivative(x):return logistic(x)*(1-logistic(x))#定义NeuralNetwork 神经网络算法
class NeuralNetwork:#初始化,layes表示的是一个list,eg[10,10,3]表示第一层10个神经元,第二层10个神经元,第三层3个神经元def __init__(self, layers, activation='tanh'):""":param layers: A list containing the number of units in each layer.Should be at least two values:param activation: The activation function to be used. Can be"logistic" or "tanh""""if activation == 'logistic':self.activation = logisticself.activation_deriv = logistic_derivativeelif activation == 'tanh':self.activation = tanhself.activation_deriv = tanh_derivself.weights = []#循环从1开始,相当于以第二层为基准,进行权重的初始化for i in range(1, len(layers) - 1):#对当前神经节点的前驱赋值self.weights.append((2*np.random.random((layers[i - 1] + 1, layers[i] + 1))-1)*0.25)#对当前神经节点的后继赋值self.weights.append((2*np.random.random((layers[i] + 1, layers[i + 1]))-1)*0.25)#训练函数   ,X矩阵,每行是一个实例 ,y是每个实例对应的结果,learning_rate 学习率,# epochs,表示抽样的方法对神经网络进行更新的最大次数def fit(self, X, y, learning_rate=0.2, epochs=10000):X = np.atleast_2d(X) #确定X至少是二维的数据temp = np.ones([X.shape[0], X.shape[1]+1]) #初始化矩阵temp[:, 0:-1] = X  # adding the bias unit to the input layerX = tempy = np.array(y) #把list转换成array的形式for k in range(epochs):#随机选取一行,对神经网络进行更新i = np.random.randint(X.shape[0])a = [X[i]]#完成所有正向的更新for l in range(len(self.weights)):a.append(self.activation(np.dot(a[l], self.weights[l])))#error = y[i] - a[-1]deltas = [error * self.activation_deriv(a[-1])]#开始反向计算误差,更新权重for l in range(len(a) - 2, 0, -1): # we need to begin at the second to last layerdeltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_deriv(a[l]))deltas.reverse()for i in range(len(self.weights)):layer = np.atleast_2d(a[i])delta = np.atleast_2d(deltas[i])self.weights[i] += learning_rate * layer.T.dot(delta)#预测函数def predict(self, x):x = np.array(x)temp = np.ones(x.shape[0]+1)temp[0:-1] = xa = tempfor l in range(0, len(self.weights)):a = self.activation(np.dot(a, self.weights[l]))return a

2、基于NeuralNetwork的手写数字识别

#-*-coding:utf-8-*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')import numpy as np
from sklearn.datasets import load_digits
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.preprocessing import LabelBinarizer
from NeuralNetwork import NeuralNetwork
from sklearn.cross_validation import train_test_splitdigits = load_digits()
X = digits.data
y = digits.target
X -= X.min() # normalize the values to bring them into the range 0-1
X /= X.max()###############################训练模型########################
nn = NeuralNetwork([64,100,10],'logistic')
X_train, X_test, y_train, y_test = train_test_split(X, y)labels_train = LabelBinarizer().fit_transform(y_train)
labels_test = LabelBinarizer().fit_transform(y_test)
print "start fitting"
nn.fit(X_train,labels_train,epochs=3000)###############预测结果###############################
predictions = []
for i in range(X_test.shape[0]):o = nn.predict(X_test[i] )predictions.append(np.argmax(o))###############混淆矩阵#####################################
print confusion_matrix(y_test,predictions)
print classification_report(y_test,predictions)#################打印预测结果#####################
# for each in predictions:
#     print each# for each in y_test:
#     print each

3、运行结果:


start fitting
[[44  0  0  0  0  0  0  0  0  0][ 0 44  0  0  0  1  0  0  2  0][ 0  1 39  0  0  0  0  0  0  0][ 0  1  0 49  0  0  0  2  2  0][ 0  2  0  0 34  0  0  2  1  0][ 0  2  0  0  1 44  1  0  0  3][ 1  2  0  0  0  0 43  0  0  0][ 0  0  0  0  0  0  0 41  0  0][ 0  4  0  0  0  1  0  1 31  2][ 0  4  0  0  0  0  0  1  1 43]]precision    recall  f1-score   support0       0.98      1.00      0.99        441       0.73      0.94      0.82        472       1.00      0.97      0.99        403       1.00      0.91      0.95        544       0.97      0.87      0.92        395       0.96      0.86      0.91        516       0.98      0.93      0.96        467       0.87      1.00      0.93        418       0.84      0.79      0.82        399       0.90      0.88      0.89        49avg / total       0.92      0.92      0.92       450Process finished with exit code 0

这篇关于【DL--22】实现神经网络算法NeuralNetwork以及手写数字识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144396

相关文章

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python