我已经使用梯度下降和反向传播算法在Matlab中构建了一个深度神经网络图像分类器程序(每个例子给出1个输出,例如是否是汽车)。它是一个简单的前馈网络,有1或2个隐藏层。我在nvcc C ++中使用获得的权重进行实时对象检测。
NN训练结果具有相当高的准确度(超过%99.9,但还不够),并且可以处理超过100,000个大小为32x32的图像文件。但只有Matlab代码的问题是:它在每次训练中以局部最小值结束,因此需要很多不同的训练,但训练速度很慢。
除了我慢慢运作的Matlab NN训练代码,我尝试过:
1)OpenCV 3.0.0,它"可能"目前在虚拟浮点数cv :: ml :: StatModel :: predict函数中有一个bug。所以我无法正常使用它。
2)尝试OpenNN with gui,但在加载和训练期间甚至卡住了。我还在努力解决这个问题。
3)选中FANN,但只能找到"一个"用C ++编写的教程代码。可能需要花费很长时间才能通过示例来掌握它。
4)几个月前我曾在Python中尝试过Theano,它非常可定制,而且有很多教程。但是从来没有尝试用它训练图像文件。
5)我也可以将我的Matlab代码传输到nvcc C ++,并尝试使用共轭渐变方法来进一步加速。但是还没有尝试过,这是我的最后选择。
掌握每条路径可能需要相当长的时间,而且我还有很多不同的工作要做。我应该走哪条路,或者你有另一条建议?谢谢
答案 0 :(得分:1)
如果您有使用Matlab的经验,最简单的方法是通过" VGG卷积神经网络实践"并使用他们的开源MatConvNet工具箱进行Matlab:http://www.vlfeat.org/matconvnet/。