DL之NN/CNN:NN算法进阶优化(本地数据集50000张训练集图片),六种不同优化算法实现手写数字图片识别逐步提高99.6%准确率-阿里云开发者社区

开发者社区> 一个处女座的程序猿> 正文

DL之NN/CNN:NN算法进阶优化(本地数据集50000张训练集图片),六种不同优化算法实现手写数字图片识别逐步提高99.6%准确率

简介: DL之NN/CNN:NN算法进阶优化(本地数据集50000张训练集图片),六种不同优化算法实现手写数字图片识别逐步提高99.6%准确率
+关注继续查看

设计思路


image.png



设计代码


import mnist_loader

from network3 import Network                                        

from network3 import ConvPoolLayer, FullyConnectedLayer, SoftmaxLayer  

training_data, validation_data, test_data = mnist_loader.load_data_wrapper()  

mini_batch_size = 10  

#NN算法:sigmoid函数;准确率97%

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)

#CNN算法:1层Convolution+sigmoid函数;准确率98.78%

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)

#CNN算法:2层Convolution+sigmoid函数;准确率99.06%。层数过多并不会使准确率大幅度提高,有可能overfit,合适的层数需要通过实验验证出来,并不是越多越好

net = Network([

       ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),

                     filter_shape=(20, 1, 5, 5),

                     poolsize=(2, 2)),

       ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),

                     filter_shape=(40, 20, 5, 5),

                     poolsize=(2, 2)),

       FullyConnectedLayer(n_in=40*4*4, n_out=100),

       SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)

#CNN算法:用Rectified Linear Units即f(z) = max(0, z),代替sigmoid函数;准确率99.23%

net = Network([

       ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),

                     filter_shape=(20, 1, 5, 5),

                     poolsize=(2, 2),

                     activation_fn=ReLU),   #激活函数采用ReLU函数

       ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),

                     filter_shape=(40, 20, 5, 5),

                     poolsize=(2, 2),

                     activation_fn=ReLU),

       FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),

       SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)

#CNN算法:用ReLU函数+增大训练集25万(原先50000*5,只需将每个像素向上下左右移动一个像素);准确率99.37%

$ python expand_mnist.py   #将图片像素向上下左右移动

expanded_training_data, _, _ = network3.load_data_shared("../data/mnist_expanded.pkl.gz")  

net = Network([

       ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),

                     filter_shape=(20, 1, 5, 5),

                     poolsize=(2, 2),

                     activation_fn=ReLU),

       ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),

                     filter_shape=(40, 20, 5, 5),

                     poolsize=(2, 2),

                     activation_fn=ReLU),

       FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),

       SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)

net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,validation_data, test_data, lmbda=0.1)

#CNN算法:用ReLU函数+增大训练集25万+dropout(随机选取一半神经元)用在最后的FullyConnected层;准确率99.60%

expanded_training_data, _, _ = network3.load_data_shared("../data/mnist_expanded.pkl.gz")

net = Network([

       ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),

                     filter_shape=(20, 1, 5, 5),

                     poolsize=(2, 2),

                     activation_fn=ReLU),

       ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),

                     filter_shape=(40, 20, 5, 5),

                     poolsize=(2, 2),

                     activation_fn=ReLU),

       FullyConnectedLayer(

           n_in=40*4*4, n_out=1000, activation_fn=ReLU, p_dropout=0.5),

       FullyConnectedLayer(

           n_in=1000, n_out=1000, activation_fn=ReLU, p_dropout=0.5),

       SoftmaxLayer(n_in=1000, n_out=10, p_dropout=0.5)],

       mini_batch_size)

net.SGD(expanded_training_data, 40, mini_batch_size, 0.03,validation_data, test_data)


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
图像算法的工程优化技术
图像算法的工程优化技术 当一个很酷的图像算法实现之后,我们希望集成到软件中去,这时将会遇到最大的拦路虎:性能。 可以想像一下,如果美图秀秀做一个美颜效果要转圈圈转个30秒,还会有多少人用呢。 学术界喜欢推出复杂度更低的算法,去解决性能问题,而在实际工程应用中,对代码的优化和硬件的良好运用效果来得更快更显著,这里就对不改动算法,纯工程方面做性能优化的技术作一个简介。
1295 0
想将算法进一步开发吗?手把手教你搭建基于CNN模型的Flask Web应用
想将算法进一步开发应用产品吗?本文手把手教你搭建基于CNN模型的Flask Web应用,算是抛砖引玉了。感兴趣的读者可以将自己的算法开发成其他类型的应用产品,说不定下一个人工智能创业公司Boss就是你哦!
4821 0
7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml
 数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDefault.xml.所有的key皆为char *型,value类型为bool intfloat double std::string. 读操作
1233 0
DL之Attention:基于ClutteredMNIST手写数字图片数据集分别利用CNN_Init、ST_CNN算法(CNN+SpatialTransformer)实现多分类预测(一)
DL之Attention:基于ClutteredMNIST手写数字图片数据集分别利用CNN_Init、ST_CNN算法(CNN+SpatialTransformer)实现多分类预测
31 0
DL之Attention:基于ClutteredMNIST手写数字图片数据集分别利用CNN_Init、ST_CNN算法(CNN+SpatialTransformer)实现多分类预测(二)
DL之Attention:基于ClutteredMNIST手写数字图片数据集分别利用CNN_Init、ST_CNN算法(CNN+SpatialTransformer)实现多分类预测
22 0
DL之RNN:人工智能为你写小说——基于TF利用RNN算法训练数据集(William Shakespeare的《Coriolanus》)替代你写英语小说短文、训练&测试过程全记录
DL之RNN:人工智能为你写小说——基于TF利用RNN算法训练数据集(William Shakespeare的《Coriolanus》)替代你写英语小说短文、训练&测试过程全记录
14 0
SAS进阶《深入分析SAS》之数据汇总和展现
SAS进阶《深入分析SAS》之数据汇总和展现 1. 通过Print过程制作报表 proc print <data=数据集>; run; 选项: obs=修改观测序号列标签 noobs不显示观测序列号 id语句在输出中取代观测序列 var选择输出的变量 where语句选择输出的观测 总结如下: proc print data=数据集<选项&g
1165 0
SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集
SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集 前言:在学习完《SAS编程与商业案例》后,虽然能够接手公司的基本工作,但是为了更深入的SAS学习,也为了站在更高的一个层次上去掌握和优化公司工作,故而又咬紧牙关加紧学习《深入解析SAS》.就目前的两本书的对比,显而易见的是本书比《SAS编程…》要厚的多,再者内容更新是2015年著,最后是内容详实
1749 0
SAS进阶《深入解析SAS》之SAS数据挖掘的一般流程
SAS进阶《深入解析SAS》之SAS数据挖掘的一般流程 1. 所谓数据挖掘,是指通过对大量的数据进行选择、探索与建模,来揭示包含在数据中以前不为人所知的模式或规律,从而为商业活动或科学研究提供帮助和服务。 2. 数据挖掘重要的两个类别:有监督分析(SupervisedAnalysis),无监督分析(UnsupervisedAnalysis)。 有监督分析属于目标
1072 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载