1. import mnist_loader
  2. from network3 import Network
  3. from network3 import ConvPoolLayer, FullyConnectedLayer, SoftmaxLayer
  4.  
  5. training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
  6. mini_batch_size = 10
  7.  
  8. #NN算法:sigmoid函数;准确率97%
  9. net = Network([
  10. FullyConnectedLayer(n_in=784, n_out=100),
  11. SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
  12. net.SGD(training_data, 60, mini_batch_size, 0.1, validation_data, test_data)
  13.  
  14. #CNN算法:1层Convolution+sigmoid函数;准确率98.78%
  15. net = Network([
  16. ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
  17. filter_shape=(20, 1, 5, 5),
  18. poolsize=(2, 2)),
  19. FullyConnectedLayer(n_in=20*12*12, n_out=100),
  20. SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
  21.  
  22. #CNN算法:2层Convolution+sigmoid函数;准确率99.06%。层数过多并不会使准确率大幅度提高,有可能overfit,合适的层数需要通过实验验证出来,并不是越多越好
  23. net = Network([
  24. ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
  25. filter_shape=(20, 1, 5, 5),
  26. poolsize=(2, 2)),
  27. ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
  28. filter_shape=(40, 20, 5, 5),
  29. poolsize=(2, 2)),
  30. FullyConnectedLayer(n_in=40*4*4, n_out=100),
  31. SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
  32.  
  33. #CNN算法:用Rectified Linear Units即f(z) = max(0, z),代替sigmoid函数;准确率99.23%
  34. net = Network([
  35. ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
  36. filter_shape=(20, 1, 5, 5),
  37. poolsize=(2, 2),
  38. activation_fn=ReLU), #激活函数采用ReLU函数
  39. ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
  40. filter_shape=(40, 20, 5, 5),
  41. poolsize=(2, 2),
  42. activation_fn=ReLU),
  43. FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
  44. SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
  45.  
  46. #CNN算法:用ReLU函数+增大训练集25万(原先50000*5,只需将每个像素向上下左右移动一个像素);准确率99.37%
  47. $ python expand_mnist.py #将图片像素向上下左右移动
  48. expanded_training_data, _, _ = network3.load_data_shared("../data/mnist_expanded.pkl.gz")
  49. net = Network([
  50. ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
  51. filter_shape=(20, 1, 5, 5),
  52. poolsize=(2, 2),
  53. activation_fn=ReLU),
  54. ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
  55. filter_shape=(40, 20, 5, 5),
  56. poolsize=(2, 2),
  57. activation_fn=ReLU),
  58. FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
  59. SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
  60. net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,validation_data, test_data, lmbda=0.1)
  61.  
  62. #CNN算法:用ReLU函数+增大训练集25万+dropout(随机选取一半神经元)用在最后的FullyConnected层;准确率99.60%
  63. expanded_training_data, _, _ = network3.load_data_shared("../data/mnist_expanded.pkl.gz")
  64. net = Network([
  65. ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
  66. filter_shape=(20, 1, 5, 5),
  67. poolsize=(2, 2),
  68. activation_fn=ReLU),
  69. ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
  70. filter_shape=(40, 20, 5, 5),
  71. poolsize=(2, 2),
  72. activation_fn=ReLU),
  73. FullyConnectedLayer(
  74. n_in=40*4*4, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
  75. FullyConnectedLayer(
  76. n_in=1000, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
  77. SoftmaxLayer(n_in=1000, n_out=10, p_dropout=0.5)],
  78. mini_batch_size)
  79. net.SGD(expanded_training_data, 40, mini_batch_size, 0.03,validation_data, test_data)

CNN:人工智能之神经网络算法进阶优化,六种不同优化算法实现手写数字识别逐步提高,应用案例自动驾驶之捕捉并识别周围车牌号—Jason niu的更多相关文章

  1. 用Keras搭建神经网络 简单模版(二)——Classifier分类(手写数字识别)

    # -*- coding: utf-8 -*- import numpy as np np.random.seed(1337) #for reproducibility再现性 from keras.d ...

  2. 一看就懂的K近邻算法(KNN),K-D树,并实现手写数字识别!

    1. 什么是KNN 1.1 KNN的通俗解释 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1 ...

  3. 利用神经网络算法的C#手写数字识别

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwritten_character_recognition.zip 下载源码 - 70. ...

  4. 利用神经网络算法的C#手写数字识别(一)

    利用神经网络算法的C#手写数字识别 转发来自云加社区,用于学习机器学习与神经网络 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwri ...

  5. 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  6. C#中调用Matlab人工神经网络算法实现手写数字识别

    手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写 ...

  7. 实现手写数字识别(数据集50000张图片)比较3种算法神经网络、灰度平均值、SVM各自的准确率—Jason niu

    对手写数据集50000张图片实现阿拉伯数字0~9识别,并且对结果进行分析准确率, 手写数字数据集下载:http://yann.lecun.com/exdb/mnist/ 首先,利用图片本身的属性,图片 ...

  8. 用Keras搭建神经网络 简单模版(三)—— CNN 卷积神经网络(手写数字图片识别)

    # -*- coding: utf-8 -*- import numpy as np np.random.seed(1337) #for reproducibility再现性 from keras.d ...

  9. 卷积神经网络CNN 手写数字识别

    1. 知识点准备 在了解 CNN 网络神经之前有两个概念要理解,第一是二维图像上卷积的概念,第二是 pooling 的概念. a. 卷积 关于卷积的概念和细节可以参考这里,卷积运算有两个非常重要特性, ...

随机推荐

  1. vue -webpack.dev.config.js模拟后台数据接口

    在const portfinder = require('portfinder')后面添加 const express = require('express') const app = express ...

  2. 通过printf从目标板到调试器的输出

    最近在SEGGER的博客上看到Johannes Lask写的一篇关于在调试时使用printf函数从目标MCU输出信息到调试器的文章,自我感觉很有启发,特此翻译此文并推荐给各位同仁.当然限于个人水平,有 ...

  3. 快速理解VirtualBox的四种网络连接方式

    VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-only Adapter VMWare中有三种,其实他跟VMWare 的网络连接方式都是 ...

  4. 关于Sublime text 3如何编辑less并转(编译)成css文件

    今天开始学习使用less这个强大方便的前端工具,本来是考虑用koala(专门编辑less的软件)来使用less的,但是发现sublime编辑器也可以实现对less的编译及高亮显示代码,这样既能少用一个 ...

  5. name

    问题 A: name 时间限制: 1 Sec  内存限制: 256 MB 题目描述 lpq同学最近突然对外国人的名字产生了兴趣,特别是外国女生的名字,于是他开始试图去认识一些国外的女生. 随着认识的女 ...

  6. C++11新特性--decltype (转)

    返回值 decltype(表达式) [返回值的类型是表达式参数的类型] 这个可也用来决定表达式的类型,就像Bjarne暗示的一样,如果我们需要去初始化某种类型的变量,auto是最简单的选择,但是如果我 ...

  7. Java接口自动化测试之TestNG学习(二)

    在maven项目的pom.xml文件中导入TestNG <?xml version="1.0" encoding="UTF-8"?> <pro ...

  8. Python学生信息管理系统的开发

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  9. PAT Basic 1065 单身狗

    单身狗(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue "单身狗"是中文对于单身人士的 ...

  10. 微信小程序API 登录-wx.login(OBJECT) + 获取微信用户唯一标识openid | 小程序

    wx.login(OBJECT) 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key).用户数据的加解密通讯需要 ...