我是机器学习和Dlib的初学者,请原谅我的问题可能有些绕圈子。
我一直在查看Dlib文档中的一些示例项目,并大致理解了这个示例:
http://dlib.net/dnn_introduction_ex.cpp.html
这个示例看起来足够简单,我可以理解如何编译一个工作示例。
然而,我想要尝试的是,在示例中使用loss_mean_squared_multioutput
层来替代loss_multiclass_log
,因为我认为它更适合我的模型。
简单描述一下我的问题,这是一个有5个输出的回归问题。在训练时,我想输入一张“图像”,并根据该输入训练网络来评估这5个输出中任何一个的价值。
例如,如果我输入(伪代码):
input = [1, 0, 0, 0, 0, 0, 0, 0]
我希望输出产生类似这样的结果
output = [0, 0.1, 0, 0.5, -1]
考虑到这一点,如果loss_mean_squared_multioutput
的标签是matrix<float>
,我应该大致这样使用它吗?
loss_multiclass_log<fc<5...trainer.train([list of matrix<float>], [list of matrix<float 1, 5> = 0, 0.1, 0, 0.5, -1]);
如果您在阅读后觉得这完全是误导和无稽之谈,请随时纠正我。我会很感激您的指导。
回答:
为了帮助可能有同样疑问的人,Dlib的测试套件中有一个示例 – https://github.com/davisking/dlib/blob/master/dlib/test/dnn.cpp#L2343
使用它的想法基本上是对的,但请确保在以下位置使用单列矩阵:
loss_multiclass_log<fc<5...
您需要在训练器中使用单列矩阵,像这样:
// 使用 "matrix<float 5, 1>",而不是 "matrix<float 1, 5>"...trainer.train(input..., [list of matrix<float 5, 1>...);
希望这对您有帮助。