Deep Learning(Logistic Regression)学习之MNIST C++实现

本文介绍了作者使用C++实现Logistic Regression算法解决MNIST手写数字识别问题的过程。文章详细讲解了SGD算法的实现、C++代码结构、数据预处理以及主程序的执行流程。作者强调了为何选择C++实现而不是Python的Theano,并分享了程序的不足之处和改进点。
摘要由CSDN通过智能技术生成

1、这是75%完成度的SGD代码

主要的程序在八月中旬基本完成了,后边忙别的事情,实在懒得再仔细写了,目前的代码是75%完成度的,已知bug和可以改进的地方有:

1、在多次进行下降后,参数矩阵可能变成NaN值。(即由于参数计算导致除零错,目前尚未排查,估计在6%错误率左右的时候出现)

2、并发性可以进行改进。包括采用GPU进行计算的可能。

3、断点保存可以改进。目前保存每次的参数矩阵,可以从上次参数矩阵进行下降。但尚未保存每次退出时进行下降的训练例子位置等信息。

这个SGD的效果还行,应该不比原例子差,不过性能就差了不止十万八千里(囧)。但是考虑到这是第一次写这种算法,没有必要对自己吹毛求疵,而且目的是为了学习和理解SGD算法,自我安慰安慰。

原例子在http://deeplearning.net/tutorial/gettingstarted.html,采用python写的,主要数学工具是Theano。

这个SGD代码的程序一会儿我上载到资源区。

2、为什么要用 C++实现SGD算法

这是因为没有搞定Theano。Logistic-SGD所需环境包括Theano,但是在尝试在Win7/IronPython VS2010环境下安装Theano未果之后,只能采取手动挡来研究一下Logistic-SGD的代码了。

基本思路是通过IronPython+VS2010 .Net环境,在找一些数学库(用于矩阵运算等等),替换Theano的部分内容,使得程序能够跑起来。

结果后来VS2010.Net操作IronPython没有搞定numpy库(抓狂,在外边直接可以用numpy,在C++初始化IronPython却不能使用numpy),加上学的深入一点后,似乎不用特别复杂的数学库,直接实现也可以。于是就有了这个程序。

 

3、SGD理论












评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值