DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率

简介: 上一篇文章,比较了三种算法实现对手写数字识别,其中,SVM和神经网络算法表现非常好准确率都在90%以上,本文章进一步探讨对神经网络算法优化,进一步提高准确率,通过测试发现,准确率提高了很多。

思路设计


首先,改变之一:


先在初始化权重的部分,采取一种更为好的随机初始化方法,我们依旧保持正态分布的均值不变,只对标准差进行改动,


初始化权重改变前,


def large_weight_initializer(self):  

       self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]

       self.weights = [np.random.randn(y, x)  for x, y in zip(self.sizes[:-1], self.sizes[1:])]

初始化权重改变后,


   def default_weight_initializer(self):

       self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]

       self.weights = [np.random.randn(y, x)/np.sqrt(x)  for x, y in zip(self.sizes[:-1], self.sizes[1:])]

改变之二:


为了减少Overfitting,降低数据局部噪音影响,将原先的目标函数由 quadratic cost 改为 cross-enrtopy cost


class CrossEntropyCost(object):

   def fn(a, y):

       return np.sum(np.nan_to_num(-y*np.log(a)-(1-y)*np.log(1-a)))

   def delta(z, a, y):

       return (a-y)

改变之三:


将S函数改为Softmax函数


class SoftmaxLayer(object):

   def __init__(self, n_in, n_out, p_dropout=0.0):

       self.n_in = n_in

       self.n_out = n_out

       self.p_dropout = p_dropout

       self.w = theano.shared(

           np.zeros((n_in, n_out), dtype=theano.config.floatX),

           name='w', borrow=True)

       self.b = theano.shared(

           np.zeros((n_out,), dtype=theano.config.floatX),

           name='b', borrow=True)

       self.params = [self.w, self.b]

   def set_inpt(self, inpt, inpt_dropout, mini_batch_size):

       self.inpt = inpt.reshape((mini_batch_size, self.n_in))

       self.output = softmax((1-self.p_dropout)*T.dot(self.inpt, self.w) + self.b)

       self.y_out = T.argmax(self.output, axis=1)

       self.inpt_dropout = dropout_layer(

           inpt_dropout.reshape((mini_batch_size, self.n_in)), self.p_dropout)

       self.output_dropout = softmax(T.dot(self.inpt_dropout, self.w) + self.b)

   def cost(self, net):

       "Return the log-likelihood cost."

       return -T.mean(T.log(self.output_dropout)[T.arange(net.y.shape[0]), net.y])

   def accuracy(self, y):

       "Return the accuracy for the mini-batch."

       return T.mean(T.eq(y, self.y_out))


相关文章
|
2月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
70 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
28天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
2月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
2月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
113 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
2月前
|
算法 决策智能
基于禁忌搜索算法的VRP问题求解matlab仿真,带GUI界面,可设置参数
该程序基于禁忌搜索算法求解车辆路径问题(VRP),使用MATLAB2022a版本实现,并带有GUI界面。用户可通过界面设置参数并查看结果。禁忌搜索算法通过迭代改进当前解,并利用记忆机制避免陷入局部最优。程序包含初始化、定义邻域结构、设置禁忌列表等步骤,最终输出最优路径和相关数据图表。
|
2月前
|
算法
基于最小二乘递推算法的系统参数辨识matlab仿真
该程序基于最小二乘递推(RLS)算法实现系统参数辨识,对参数a1、b1、a2、b2进行估计并计算误差及收敛曲线,对比不同信噪比下的估计误差。在MATLAB 2022a环境下运行,结果显示了四组误差曲线。RLS算法适用于实时、连续数据流中的动态参数辨识,通过递推方式快速调整参数估计,保持较低计算复杂度。
|
2月前
|
算法 Java C++
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
|
2月前
|
算法 Java Linux
java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
这篇文章介绍了如何在Java中使用Graphics2D在图片上绘制文字,并实现自动换行的功能。
116 0
|
2月前
|
算法 C++
蓝桥 算法训练 共线(C++)
蓝桥 算法训练 共线(C++)
|
3月前
|
算法
基于极大似然算法的系统参数辨识matlab仿真
本程序基于极大似然算法实现系统参数辨识,对参数a1、b1、a2、b2进行估计,并计算估计误差及收敛曲线,对比不同信噪比下的误差表现。在MATLAB2022a版本中运行,展示了参数估计值及其误差曲线。极大似然估计方法通过最大化观测数据的似然函数来估计未知参数,适用于多种系统模型。