- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个安全系统,我需要对检测到的运动是由人类还是其他原因(例如微风)引起的进行分类......
为此,我最初使用带有关键点的 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 张随机背景部分的图像(我随机打乱了数据集),我尝试更改优化器,学习率 和 batch size,但是当我用 500 张正图像和 500 张负图像测试它时,结果我总是只得到一个类别,每张图像的置信度略有不同。可能是什么问题?
最佳答案
一般来说,您用来从头训练 DNN 的图片数量看起来非常小。为此,您应该考虑或许增加十倍。
另一种方法是使用与快速学习分类服务相同的方法,例如 vize.it ,即使用 a model zoo 中的现有模型预训练您的神经网络并根据您的任务对其进行微调;通过一个简单的应用程序,您可能不会获得与现有服务一样好的结果,但它应该可以帮助您入门。
但首先,您应该进行一些简单的完整性检查,以确保您没有犯更基本的错误:
使用相同类型的图像进行训练和测试。从您的问题中不清楚您是随机拆分数据还是使用来自不同来源的图像 - 如果是后者,请执行图片看起来真的很相似?
您的网络会过拟合吗?如果您向它询问您用于训练的图像怎么办?您应该对这些做出更清晰的预测 - 如果是这样,上述建议绝对适用。
您的网络能否在简单任务上过拟合?尝试为其提供更小的图像,例如 2 或 10 张。您的网络能否识别回这些图像?如果仍然不走运,您可能遇到了数据处理问题或您的框架出现了一些错误。如果可行,是时候进一步调整优化参数了。
祝你好运!
关于c++ - 用于行人识别的 tiny-dnn 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40367232/
我是一名优秀的程序员,十分优秀!