本文介绍如何使用由python编写的卷积神经网络代码(使用axdby玩的声音),以及如何比较卷积神经网络与常规神经网络预测的效果。
这个例子是一个经典的识别MNIST手写的AI程序。 以下手写数字分别表示504192。 该程序训练此类样本,并通过测试集验证正确率。
稍后我会单独写文章介绍卷积神经网络的原理。
准备:
安装虚拟机
pip安装虚拟件
创建env
虚拟新闻
Cd新冠
source bin/activate
安装Theano库
pip install Theano
下载代码
git clone https://github.com/m Nielsen/neural-networks-and-deep-learning.git
卷积神经网络位于src/network3.py上。 作者编写代码后,Theano库更新,downsample被丢弃,因此network3.py需要进行两处修改。 “#”之后是原始代码,没有“#”的是修改后的代码。
# from the ano.tensor.signalimportdownsample
from the ano.tensor.signal.poolimportpool _ 2d
.
# pooled _ out=down sample.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
普通神经网络
使用常规的全连接层模型训练各种参数。 每个参数的意思是稍后专门写文章介绍。 也请参考作者的书。
单隐藏层
100隐藏新闻
60 epochs
学习速率:=0.1
迷你batch size : 10
无规则化
首先通过普通神经网络训练,执行指令:
导入网络3
来自网络3导入网络
fromnetwork3importconvpoollayer,FullyConnectedLayer,SoftmaxLayer
training_data,validation_data,test _ data=network3. load _ data _ shared (
mini_batch_size=10
网络=网络([
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
培训mini-batch number 1000
培训mini-batch number 2000
培训mini-batch number 3000
培训mini-batch number 4000
epoch 0:验证加速92.62 %
thisisthebestvalidationaccuracytodate。
thecorrespondingtestaccuracyis 92.00 %
培训mini-batch number 5000
培训mini-batch number 6000
培训mini-batch number 7000
培训mini-batch number 8000
培训mini-batch number 9000
epoch 1:验证加速94.64 %
thisisthebestvalidationaccuracytodate。
thecorrespondingtestaccuracyis 94.10 %
.
培训mini-batch number 295000
培训mini-batch number 296000
培训mini-batch number 297000
培训mini-batch number 298000
培训mini-batch number 299000
epoch 59:验证加速97.76 %
thisisthebestvalidationaccuracytodate。
thecorrespondingtestaccuracyis 97.79 %
完成培训网络。
bestvalidationaccuracyof 97.76 % obtainedatiteration 29999
Correspondingtestaccuracyof 97.79 %
准确率为97.79%,或错误率为2.21%
卷积神经网络
使用卷积模型训练各种参数如下。
5个本地接收字段: 5x 5
stride length : 1
功能映射: 20
最大轮询层
2个pooling windows :
执行命令
网络=网络([
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
培训mini-batch number 1000
培训mini-batch number 2000
培训mini-batch number 3000
培训mini-batch number 4000
epoch 0:验证加速94.18 %
thisisthebestvalidationaccuracytodate。
thecorrespondingtestaccuracyis 93.43 %
培训mini-batch number 5000
培训mini-batch number 6000
培训mini-batch number 7000
培训mini-batch number 8000
培训mini-batch number 9000
epoch 1:验证加速96.12 %
thisisthebestvalidationaccuracytodate。
thecorrespondingtestaccuracyis 95.85 %
.
培训mini-batch number 295000
培训mini-batch number 296000
培训mini-batch number 297000
培训mini-batch number 298000
培训mini-batch number 299000
epoch 59:验证加速98.74 %
完成培训网络。
bestvalidationaccuracyof 98.74 % obtainedatiteration 214999
Correspondingtestaccuracyof 98.84 %
命中率为98.84%,或者错误率为1.16%,错误率几乎下降了一半!
相关报道