python在线神经网络实现手写字符识别系统

本文介绍了一门课程,该课程基于《500 lines or less》项目,教你如何使用神经网络实现一个手写字符识别系统。课程详细讲解了神经网络的原理,包括BP神经网络,并指导读者通过Python进行实践,实现用户接口、客户端、服务器端以及神经网络模型。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

神经网络实现手写字符识别系统

一、课程介绍

1. 课程来源

本课程核心部分来自《500 lines or less》项目,作者是来自 Mozilla 的工程师 Marina Samuel,这是她的个人主页:http://www.marinasamuel.com/ 。项目代码使用 MIT 协议,项目文档使用http://creativecommons.org/licenses/by/3.0/legalcode 协议。

课程内容在原文档基础上做了稍许修改,增加了部分原理介绍,步骤的拆解分析及源代码注释。

2. 内容简介

本课程最终将基于BP神经网络实现一个手写字符识别系统,系统会在服务器启动时自动读入训练好的神经网络文件,如果文件不存在,则读入数据集开始训练,用户可以通过在html页面上手写数字发送给服务器来得到识别结果。

3. 课程知识点

本课程项目完成过程中,我们将学习:

  1. 什么是神经网络
  2. 在客户端(浏览器)完成手写数据的输入与请求的发送
  3. 在服务器端根据请求调用神经网络模块并给出响应
  4. 实现BP神经网络

二、实验环境

打开终端,进入 Code 目录,创建 ocr 文件夹, 并将其作为我们的工作目录。

$ cd Code$ mkdir ocr && cd ocr

三、实验原理

人工智能

图灵对于人工智能的定义大家都已耳熟能详,但"是什么构成了智能"至今仍是一个带有争论的话题。计算机科学家们目前将人工智能分成了多个分支,每一个分支都专注于解决一个特定的问题领域,举其中三个有代表性的分支:

  • 基于预定义知识的逻辑与概率推理,比如模糊推理能够帮助一个恒温器根据监测到的温度和湿度决定什么时候开关空调。
  • 启发式搜索,比如在棋类游戏中搜索到走下一子的最优解。
  • 机器学习,比如手写字符识别系统。

简单来说,机器学习的目的就是通过大量数据训练一个能够识别一种或多种模式的系统。训练系统用的数据集合被称作训练集,如果训练集的每个数据条目都打上目标输出值(也就是标签),则该方法称作监督学习,不打标签的则是非监督学习。机器学习中有多种算法能够实现手写字符识别系统,在本课程中我们将基于神经网络实现该系统。

什么是神经网络

神经网络由能够互相通信的节点构成,赫布理论解释了人体的神经网络是如何通过改变自身的结构和神经连接的强度来记忆某种模式的。而人工智能中的神经网络与此类似。请看下图,最左一列蓝色节点是输入节点,最右列节点是输出节点,中间节点是隐藏节点。该图结构是分层的,隐藏的部分有时候也会分为多个隐藏层。如果使用的层数非常多就会变成我们平常说的深度学习了。

此处输入图片的描述

每一层(除了输入层)的节点由前一层的节点加权加相加加偏置向量并经过激活函数得到,公式如下:

此处输入图片的描述

其中f是激活函数,b是偏置向量,它们的作用会在之后说明。

这一类拓扑结构的神经网络称作前馈神经网络,因为该结构中不存在回路。有输出反馈给输入的神经网络称作递归神经网络(RNN)。在本课程中我们使用前馈神经网络中经典的BP神经网络来实现手写识别系统。

如何使用神经网络

很简单,神经网络属于监督学习,那么多半就三件事,决定模型参数,通过数据集训练学习,训练好后就能到分类工具/识别系统用了。数据集可以分为2部分(训练集,验证集),也可以分为3部分(训练集,验证集,测试集),训练集可以看作平时做的习题集(可反复做),系统通过对比习题集的正确答案和自己的解答来不断学习改良自己。测试集可以看作是高考,同一份试卷只能考一次,测试集一般不会透露答案。那么验证集是什么呢?好比多个学生(类比用不同策略训练出的多个神经网络)要参加一个名额只有两三人的比赛,那么就得给他们一套他们没做过的卷子(验证集)来逐出成绩最好的几个人,有时也使用验证集决定模型参数。在本课程中数据集只划分训练集和验证集。

系统构成

我们的OCR系统分为5部分,分别写在5个文件中:

  • 客户端(ocr.js
  • 服务器(server.py
  • 用户接口(ocr.html
  • 神经网络(ocr.py)
  • 神经网络设计脚本(neural_network_design.py)

用户接口(ocr.html)是一个html页面,用户在canvans上写数字,之后点击选择训练或是预测。客户端(ocr.js)将收集到的手写数字组合成一个数组发送给服务器端(server.py)处理,服务器调用神经网络模块(ocr.py),它会在初始化时通过已有的数据集训练一个神经网络,神经网络的信息会被保存在文件中,等之后再一次启动时使用。最后,神经网络设计脚本(neural_network_design.py)是用来测试不同隐藏节点数下的性能,决定隐藏节点数用的。

四、实验步骤

我们将根据系统构成的五部分一一实现,在讲解完每一部分的核心代码后给出完整的文件代码。

实现用户接口

需要给予用户输入数据、预测、训练的接口,这部分较简单,所以直接给出完整代码:

<!-- index.html --><!DOCTYPE html><html><head>    <script src="ocr.js"></script></head><body onload="ocrDemo.onLoadFunction()">    <div id="main-container" style="text-align: center;">        <h1>OCR Demo</h1>        <canvas id="canvas" width="200" height="200"></canvas>        <form name="input">            <p>Digit: <input id="digit" type="text"> </p>            <input type="button" value="Train" onclick="ocrDemo.train()">            <input type="button" value="Test"
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值