【问题标题】:how to add more outputs to neural networks?如何向神经网络添加更多输出?
【发布时间】:2017-07-06 07:40:53
【问题描述】:

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

所以我添加了固定的输入数和 1 个输出,然后我再添加 1 个,再添加 1 个是否适用?

【问题讨论】:

  • 那么解决方案是什么?大公司是怎么创造的?他们会在启动神经网络之前创建所有图像输出类型和可能性吗?

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


【解决方案1】:

再训练

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

迁移学习

但是,如果您使用的是需要数周时间来训练(在非常昂贵的)硬件上的大型流行神经网络之一,那么可能有一种方法可以触及 迁移学习

那么至少有两种不同的方法:

使用预训练的神经网络作为特征提取器

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

一般而言,如果您的新类 + 数据集较小且与原始数据集相似,则此方法可能会更有利。

如果新数据不是那么相似,则可能会在某个较早的层使用某些功能(更通用)。

继续培训

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

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

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

【讨论】:

  • 你说的第一层非常笼统,最后是特定的是什么意思?我如何控制它?我知道如何创建输入和隐藏层和输出,然后它需要输入并找到输出的模式就是这样......我如何在最后添加更多特定的特征或部分?
  • 这是大多数深度卷积神经网络所表现出来的一种行为,而你并没有控制它。一般来说,由于密集层,人们应该期望 NN 从非常一般的特征提取到更具体的特征提取,并在最后的非常具体的分类步骤中进行。这不是被证明的东西,而是我们对这些网络的一般理解(一些论文强调了内层在做什么)。去掉一些层意味着修改代码。所以对于不同的库来说它是不同的。对于初学者来说,这可能不是一件容易的事。
  • 我的意思是我在第一个中制作多个 NN,并将其输出作为第二个 NN 的输入,将第二个的输出作为第三个的输入,依此类推..
  • 尽量让你的描述更正式。并花时间研究基本的 CNN 内容并再次阅读上述方法。
  • 好吧抱歉问了很多问题,但还有一个问题,我可以标准化输入图像尺寸吗?我把它取为 20x20,它是 40x40 .. 我可以把它变小以适应输入吗?很抱歉问了很多问题,非常感谢..我会阅读更多内容,然后得到你的回答
猜你喜欢
  • 1970-01-01
  • 2012-01-16
  • 2021-05-28
  • 2021-09-22
  • 1970-01-01
  • 2015-02-23
  • 2017-03-16
相关资源
最近更新 更多