【问题标题】:Neural Network Retraining神经网络再训练
【发布时间】:2017-02-07 04:09:05
【问题描述】:

我正在编写一个简单的神经网络,但我想到了一个困扰我的问题。 此 NN 用于在输入中查找类别。为了更好地理解这一点,假设类别是“数字”(0,1,2...9)。

为了实现这一点,输出层是 10 个节点。假设我用几个输入-输出对训练这个 NN,并将学习的权重保存在某处。由于学习过程需要相当长的时间,之后我会去休息一下。第二天来新鲜的,用新的输入-输出对重新开始学习。太公平了,太棒了

但是如果在那个时候,我决定要识别十六进制 (0,1,...9,A,B,,,E,F) 会发生什么...因此类别正在增加。

我怀疑这将意味着改变 NN 的结构,因此我应该重新训练从头开始的 NN。

是这样吗?

我们将不胜感激任何评论、建议或您的经验分享

编辑:此问题已被标记为重复。我阅读了另一个问题,虽然相似,但我的问题更具体。虽然另一个问题笼统地说,答案也很笼统——我的例子很具体:

如果我训练 NN 识别十进制数字,然后决定添加数据以使其识别十六进制,这可能吗?如何?我是否必须重新训练整个 NN?换句话说,NN 的结构是否需要从一开始就保持 10 OR 16 输出的静止状态?

我非常感谢对此的具体回答。谢谢

【问题讨论】:

标签: neural-network


【解决方案1】:

一些注意事项

  1. 你的训练集和测试集应该有相同的分布

    除非您有某种方法可以像某些算法一样指定样本权重,否则您应该不惜一切代价避免对有偏见的数据进行训练。这对于一般的机器学习来说是正确的,而不仅仅是神经网络。

  2. 从上一个会话恢复训练相当于使用良好的初始值

    从技术上讲,您只是将之前的网络用作初始值,而不是随机值。您应该一如既往地在整个数据集中进行训练,以避免出现有偏差的网络。

简答

是的,如果通过重新训练,您应该始终重新训练您的网络,您的意思是使用完整的数据集进行训练。

如果您只是将 retrain 视为进行非常长时间的训练迭代,那么无论如何这不是您的选择。您必须始终训练网络,直到训练错误和测试错误(或交叉验证错误)收敛。如果你重用之前训练的网络,那可能会更快。

你看,无论什么样的模型变化都是如此。如果您更改网络架构或数据集,或两者(您的示例)或其他一些参数。

当然,如果你改变网络架构,你在重用之前的网络时会遇到一些麻烦。您可以重用从保留的节点中学习到的参数,并为新节点随机初始化参数。

【讨论】:

  • 感谢您的回答。这是一个有趣的概念:当改变结构(架构)时,使用学习的权重作为起点而不是随机的。再次感谢
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 2010-11-20
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 2014-05-13
相关资源
最近更新 更多