如何向神经网络添加更多输出?

时间:2017-02-16 23:34:27

标签: machine-learning neural-network computer-vision artificial-intelligence conv-neural-network

当然,没有人制作用于图像识别和分类的神经网络可以为所有可能的图像输出做好准备。所以,如果我创建一个神经网络,它接受数组输入并将输出作为鸟而不是鸟。在完成学习第一个网络后,我可以为更多图像添加更多输出,否则会使学习消失。

所以我添加固定输入数字和1输出然后我再添加1个,还有1个是适用的还是没有?

1 个答案:

答案 0 :(得分:2)

重排序

如果您可以花费资源,那么重新训练(或者更具体地说:从头开始训练)您的网络将是一件好事。但是,当您可能获得更好的成果(或者至少成本更低)时,请阅读以下方法。

转移学习

但是,如果您使用的是一个非常受欢迎的NN,需要花费数周的时间来训练(非常昂贵的)硬件,可能会有一种方式触及转移学习的想法。

至少有两种不同的方法:

使用预训练的NN作为特征提取器

在这里,您将删除最终的密集层,并使用经过训练的NN从图像中提取一些特征。然后,您可以在新数据集上构建一些任意新的分类器,该分类器映射OLD-NN-OUTPUT = FEATURES-INPUT - >类(新的softmax-NN或SVM / Kernel-SVM或其他任何东西)。如果我们假设您的预训练NN质量很高而且您的新课程与学过的课程没有太大差别,那么这听起来非常强大。

一般来说,如果你的新类+数据集很小并且与原始类相似,这种方法可能会有利。

如果新数据不相似,可以在某些早期层使用某些功能(更通用)。

继续培训

在这里,您将继续训练原始NN的权重,可能保留第一层(甚至可能除了最后一层之外)。如上所述,一般的想法是我们假设一个好的NN在第一层非常通用(=提取特征),在最后一层更具体。

如果您为新班级获得了大量数据,这种方法应该是有利的。根据相似性,您可以继续重新训练所有权重,或者如果非常相似,则修复一些图层权重(第一个)。

这里可能存在技术问题如何实现这种方法(如不同的图像大小输入和其他东西)。因此,如果原始NN的某些约束被破坏,则需要一些工作。调整学习的超参数也很重要(也许学习率应该更低!)。