我正在研究安全系统,我需要对检测到的动作是由人类还是其他类似风轻的东西进行分类......
为此,我最初使用带有关键点的 MLP ,但后来我决定切换到卷积神经网络,所以我尝试使用 tiny-dnn C ++库,但结果总是不好。
这是网络:
net << conv<relu>(80,240,1,1,56) // conv1 0
<< max_pooling_layer<relu>(80,240,56,2) // max1 1
<< conv<tan_h>(40,120,1,56,64) // conv2 2
<< max_pooling_layer<relu>(40,120,64,2) // max2 3
<< conv<tan_h>(20,60,1,64,72) // conv3 4
<< max_pooling_layer<relu>(20,60,72,2) // max3 5
<< conv<tan_h>(10,30,1,72,55) // conv4 6
<< max_pooling_layer<relu>(10,30,55,2) // max4 7
<< conv<tan_h>(5,15,1,55,27) // conv5 8
<< fc<identity>(2025,333) // fc1 9
<< fc<tan_h>(333,90) // fc2 10
<< dropout_layer(90,0.5) // dropout 11
<< fc<softmax>(90,out); // fc3 12
为了训练它我使用1200个人物图像和1200个随机背景部分(我随机改组数据集),我试图改变优化器,学习率和批量大小,但是当我用500张正面图像和500张负面图像测试时,我总是得到一个类,每个图像的置信度略有不同。可能是什么问题?
答案 0 :(得分:1)
一般情况下,用于从头开始训练DNN的图片数量似乎非常小。为此,您应该考虑增加十倍。< / p>
另一种方法是使用与快速学习分类服务相同的方法,如vize.it,即预训练您的神经网络,使用a model zoo中的现有模型,并进行微调它适合你的任务;通过一个天真的应用程序,你可能不会得到与现有服务一样好的结果,但它应该让你开始。
但首先,你应该做一些简单的理智检查,以确保你没有犯更严重的错误:
使用相同类型的图片进行培训和测试。从您的问题中不清楚您是随机拆分数据还是使用来自不同来源的图片 - 如果是后者,请执行图像看起来非常相似?
您的网络是否可以过度使用?如果您询问有关用于培训的图片,该怎么办?您应该对这些做出更清晰的预测 - 如果是这样,上面的建议肯定适用。
您的网络是否能够完成一项简单的任务?尝试将其提供给更小的图像,例如只需2或10.您的网络是否可以识别这些图像?如果仍然没有运气,您可能遇到数据处理问题或者您的框架出现了一些错误。如果这样可行,则可以再调整优化参数。