使用卷积神经网络作为二进制分类器

时间:2015-06-21 09:06:32

标签: image-processing machine-learning computer-vision neural-network torch

鉴于任何图像,我希望我的分类器判断它是否是向日葵。我怎样才能创建第二堂课?保留所有可能图像的集合 - {Sunflower}在第二课中是一种矫枉过正。这个方向有没有研究?目前,我的分类器在最后一层使用神经网络。我基于以下教程:

https://github.com/torch/tutorials/tree/master/2_supervised

我正以254x254的图像作为输入。 SVM会在最后一层提供帮助吗?此外,我愿意使用任何其他可能对我有帮助的分类器/功能。

2 个答案:

答案 0 :(得分:2)

ML中的标准方法是:

1)建立模型 2)尝试用正面\负面例子训练一些数据(从训练集中50 \ 50的pos \ neg开始) 3)在测试集上验证它(再次,在测试集中尝试50 \ 50的pos \ neg示例) 如果结果不正确: a)尝试不同的型号? b)获取更多数据

对于案例#b,当决定哪些附加数据需要经验法则对我很有用时: 1)如果分类器给出了很多误报(告诉它这是一个向日葵,当它实际上根本不是向日葵) - 得到更多的负面例子 2)如果分类器给出了大量的假阴性(当它实际上是向日葵时,告诉它不是向日葵) - 得到更多正面的例子

通常,从一些合理数量的数据开始,检查结果,如果列车集或测试集上的结果是坏的 - 获取更多数据。在获得最佳结果时停止获取更多数据。

另一件事你需要考虑的是,如果你的当前数据和当前分类器的结果不好,你需要了解问题是否存在偏差(好吧,列车组和测试组的结果不好),或者是否一个高方差问题(在火车上设置得很好但在测试集上得不好)。如果您有高偏差问题 - 更多数据或更强大的分类器肯定会有所帮助。如果你有很高的方差问题 - 不需要更强大的分类器,你需要关于泛化的事情 - 引入正则化,从你的ANN中移除几层。对抗高差异的另一种可能方法是提供更多,更多更多数据。

总而言之,您需要使用迭代方法并尝试逐步增加数据量,直到获得良好结果。没有魔术棒分类器,你应该使用多少数据没有简单的答案。

答案 1 :(得分:0)

最好使用CNN作为特征提取器,剥离用于分类的原始完全连接层并添加新的分类器。这也被称为转移学习技术,已广泛应用于深度学习研究社区。对于您的问题,使用单类SVM作为添加的分类器是一个不错的选择。

具体地,

  • 可以在大型数据集上训练良好的CNN特征提取器,例如ImageNet,
  • 然后可以使用您的向日葵培训单级SVM。数据集。

解决问题的关键部分是实现单类SVM,也称为异常检测或新奇检测。您可以参考http://scikit-learn.org/stable/modules/outlier_detection.html获取有关该方法的一些见解。