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