文档章节

卷积神经网络的python实现

StanleySun
 StanleySun
发布于 2017/07/22 21:41
字数 770
阅读 162
收藏 1

   这篇文章介绍如何使用Michael Nielsen 用python写的卷积神经网络代码,以及比较卷积神经网络和普通神经网络预测的效果。

   这个例子是经典的识别MNIST手写体的AI程序。如下面这些手写数字,分别代表504192。这个程序会对这样的样本进行训练,并在测试集上验证正确率。

  至于卷积神经网络的原理,我以后会单独写一篇文章介绍。

准备:

  • 安装 virtualenv
pip install virtualenv
  •  创建env
virtualenv neural
cd neural
source bin/activate
  • 安装 Theano库
pip install Theano
  • 下载 代码
git clone https://github.com/mnielsen/neural-networks-and-deep-learning.git

 

卷积神经网络在src/network3.py里。因为在作者写完代码后,Theano库又有更新, 且downsample被废弃,所以network3.py需要做如2处修改:'#'后面的为原来的代码,不带'#'的是修改后的代码。

#from theano.tensor.signal import downsample
from theano.tensor.signal.pool import pool_2d
...

#pooled_out = downsample.max_pool_2d(input=conv_out, ds=self.poolsize, ignore_border=True)
pooled_out = pool_2d(input=conv_out, ws=self.poolsize, ignore_border=True)
  • 进入python
cd neural-networks-and-deep-learning/src
phtyon

 

普通神经网络

  • 使用普通的full-connected layer模型训练 各种参数如下。每个参数的含义,我以后会专门写文章介绍,也可参考作者的书。
single hidden layer
100  hidden neurons
60 epochs
learning rate : η=0.1
mini-batch size : 10
no regularization

 

  • 先用普通神经网络训练,执行命令:
>>> import network3
>>> from network3 import Network
>>> from network3 import ConvPoolLayer, FullyConnectedLayer, SoftmaxLayer
>>> training_data, validation_data, test_data = network3.load_data_shared()
>>> mini_batch_size = 10
>>> net = Network([
        FullyConnectedLayer(n_in=784, n_out=100),
        SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(training_data, 60, mini_batch_size, 0.1, 
            validation_data, test_data)
  • 执行结果
Training mini-batch number 0
Training mini-batch number 1000
Training mini-batch number 2000
Training mini-batch number 3000
Training mini-batch number 4000
Epoch 0: validation accuracy 92.62%
This is the best validation accuracy to date.
The corresponding test accuracy is 92.00%
Training mini-batch number 5000
Training mini-batch number 6000
Training mini-batch number 7000
Training mini-batch number 8000
Training mini-batch number 9000
Epoch 1: validation accuracy 94.64%
This is the best validation accuracy to date.
The corresponding test accuracy is 94.10%
...
Training mini-batch number 295000
Training mini-batch number 296000
Training mini-batch number 297000
Training mini-batch number 298000
Training mini-batch number 299000
Epoch 59: validation accuracy 97.76%
This is the best validation accuracy to date.
The corresponding test accuracy is 97.79%
Finished training network.
Best validation accuracy of 97.76% obtained at iteration 299999
Corresponding test accuracy of 97.79%

准确率为97.79%,或者说错误率2.21%

 

卷积神经网络

  • 使用卷积模型训练 各种参数如下:
local receptive fields: 5x5
stride length : 1
feature maps : 20
max-pooling layer
pooling windows: 2x2
  • 执行命令
>>> net = Network([
        ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28), 
                      filter_shape=(20, 1, 5, 5), 
                      poolsize=(2, 2)),
        FullyConnectedLayer(n_in=20*12*12, n_out=100),
        SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(training_data, 60, mini_batch_size, 0.1, 
            validation_data, test_data)
  • 输出
Training mini-batch number 0
Training mini-batch number 1000
Training mini-batch number 2000
Training mini-batch number 3000
Training mini-batch number 4000
Epoch 0: validation accuracy 94.18%
This is the best validation accuracy to date.
The corresponding test accuracy is 93.43%
Training mini-batch number 5000
Training mini-batch number 6000
Training mini-batch number 7000
Training mini-batch number 8000
Training mini-batch number 9000
Epoch 1: validation accuracy 96.12%
This is the best validation accuracy to date.
The corresponding test accuracy is 95.85%
...
Training mini-batch number 295000
Training mini-batch number 296000
Training mini-batch number 297000
Training mini-batch number 298000
Training mini-batch number 299000
Epoch 59: validation accuracy 98.74%
Finished training network.
Best validation accuracy of 98.74% obtained at iteration 214999
Corresponding test accuracy of 98.84%

准确率为98.84%,或者说错误率1.16%. 错误率几乎降低了一半!

 

相关文章

卷积神经网络的原理

© 著作权归作者所有

共有 人打赏支持
StanleySun
粉丝 17
博文 44
码字总数 41270
作品 0
技术主管
了解深度学习,你就是下一个AlphaGo的设计者!

现在的人工智能已经呈指数级增长。比如,自动驾驶汽车的时速达数百万英里,IBM Watson在诊断病人的情况上比医生更好,AlphaGo击败了世界冠军。这其中,人工智能扮演着关键的角色。 随着人工智...

Python雁横
05/12
0
0
深度学习入门笔记系列 ( 八 ) ——基于 tensorflow 的手写数字的识别(进阶)

基于 tensorflow 的手写数字的识别(进阶) 本系列将分为 8 篇 。本次为第 8 篇 ,基于 tensorflow ,利用卷积神经网络 CNN 进行手写数字识别 。 1.引言 关于 mnist 数据集的介绍和卷积神经网...

技术小能手
09/14
0
0
16- 深度学习之神经网络核心原理与算法-caffe&keras框架图片分类

之前我们在使用cnn做图片分类的时候使用了CIFAR-10数据集 其他框架对于CIFAR-10的图片分类是怎么做的 来与TensorFlow做对比。 Caffe Keras 安装 官方安装文档: https://github.com/IraAI/ca...

天涯明月笙
06/04
0
0
[Python人工智能] 四.神经网络和深度学习入门知识

从本篇文章开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。前三篇文章讲解了神经网络基础概念、Theano库的安装过程及基础用法、theano实现回归神经网络、theano实现分类...

eastmount
05/31
0
0
深度学习笔记10:三维卷积、池化与全连接

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能
07/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

中国发布域名系统基础软件 “红枫”

9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软件 “红枫(Maple DNS)”。 9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软...

问题终结者
33分钟前
1
0
Shell编程(分发系统介绍、expect远程登录、expect远程执行命令、expect传递参数)

分发系统介绍expect 分发系统expect即分发脚本,是一种脚本语言;通过他可以实现传输,输入命令(上线代码) 应用场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者...

蛋黄_Yolks
38分钟前
1
0
Java Http请求工具类

public static String httpPost(String source, String params) {URL url = null;HttpURLConnection conn = null;OutputStream os = null;String ret = null;try {......

yuewawa
45分钟前
1
0
C++11 智能指针

C++11提供了三个智能指针,std::shared_ptr,std::unique_ptr,std::weak_ptr。最常用的是shared_ptr和unique_ptr。 (1)std::shared_ptr shared_ptr是共享指针,通过在控制块中增加引用计数...

yepanl
46分钟前
1
0
React 服务器渲染原理解析与实践

网盘下载地址 React 服务器渲染原理解析与实践 本套课程,讲解了React中SSR技术的整个搭建思路及流程,完整的从原理上讲清楚了SSR的概念,重点在于讲解编写SSR框架遇到的各种知识点,以及细节...

qq__2304636824
57分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部