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)


相关文章
|
算法
单链表(算法面试题2)---单链表进阶2 一题多解,逐步优化
单链表(算法面试题2)---单链表进阶2 一题多解,逐步优化
46 0
|
算法 Go
单链表(面试算法题2)---单链表进阶1之快慢指针
单链表(面试算法题2)---单链表进阶1之快慢指针
56 0
|
8月前
|
机器学习/深度学习
CNN卷积神经网络手写数字集实现对抗样本与对抗攻击实战(附源码)
CNN卷积神经网络手写数字集实现对抗样本与对抗攻击实战(附源码)
111 0
|
7月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
6月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
【7月更文挑战第12天】归并排序是高效稳定的排序算法,采用分治策略。Python 实现包括递归地分割数组及合并已排序部分。示例代码展示了如何将 `[12, 11, 13, 5, 6]` 分割并归并成有序数组 `[5, 6, 11, 12, 13]`。虽然 $O(n log n)$ 时间复杂度优秀,但需额外空间,适合大规模数据排序。对于小规模数据,可考虑其他算法。**
83 4
|
6月前
|
算法 Python
Python算法高手进阶指南:分治法、贪心算法、动态规划,掌握它们,算法难题迎刃而解!
【7月更文挑战第10天】探索Python算法的精华:分治法(如归并排序)、贪心策略(如找零钱问题)和动态规划(解复杂问题)。通过示例代码揭示它们如何优化问题解决,提升编程技能。掌握这些策略,攀登技术巅峰。
153 2
|
6月前
|
机器学习/深度学习 数据采集 监控
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient
**神经网络与AI学习概览** - 探讨神经网络设计,包括MLP、RNN、CNN,激活函数如ReLU,以及隐藏层设计,强调网络结构与任务匹配。 - 参数初始化与优化涉及Xavier/He初始化,权重和偏置初始化,优化算法如SGD、Adam,针对不同场景选择。 - 学习率调整与正则化,如动态学习率、L1/L2正则化、早停法和Dropout,以改善训练和泛化。
55 0
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient
|
6月前
|
机器学习/深度学习 数据采集 算法
Python基于卷积神经网络CNN模型和VGG16模型进行图片识别项目实战
Python基于卷积神经网络CNN模型和VGG16模型进行图片识别项目实战
|
8月前
|
机器学习/深度学习 算法 TensorFlow
【视频】神经网络正则化方法防过拟合和R语言CNN分类手写数字图像数据MNIST|数据分享
【视频】神经网络正则化方法防过拟合和R语言CNN分类手写数字图像数据MNIST|数据分享
|
8月前
|
机器学习/深度学习 算法 前端开发
Scikit-learn进阶:探索集成学习算法
【4月更文挑战第17天】本文介绍了Scikit-learn中的集成学习算法,包括Bagging(如RandomForest)、Boosting(AdaBoost、GradientBoosting)和Stacking。通过结合多个学习器,集成学习能提高模型性能,减少偏差和方差。文中展示了如何使用Scikit-learn实现这些算法,并提供示例代码,帮助读者理解和应用集成学习提升模型预测准确性。

热门文章

最新文章