我是深度学习的新手。任何人都可以帮助我进行深度学习模型的在线学习。据我了解,我可以在训练后保存一个 keras/tensorflow 模型,当新数据进入时,我可以重新加载网络并使用新数据重新训练网络。我还没有看到任何记录这种方法的地方。我的理解不正确吗?如果是,请告诉我可以做些什么,以便在新数据出现时继续重新训练模型?
当新数据进来时如何重新训练神经网络?
它非常简单。有很多方法可以做到这一点。我假设您熟悉随机梯度下降。我将讲述一种幼稚的做法。
将模型重新加载到 RAM 中。
编写一个 SGD 函数,如 SGD(X,y)。它将获取新的样本和标签并在其上运行 SGD 的一步并保存更新的模型。
如您所见,这将非常低效,更好的方法是保存一些样本,然后在其上运行一个随机批量梯度下降步骤。这样您就不必每次给它一个新样本时都重新加载更新的模型。
我希望这能让您大致了解如何完成实施。您可以轻松找到更高效和可扩展的方法来执行此操作。如果您不熟悉 SGD 等等待算法,我建议您熟悉它们,因为在线学习只是一个示例小批量梯度下降算法。
是的,有一些基于库的方法可以做到这一点。此功能的正确关键字是Checkpoint。因此,您可以检查功能以从硬盘保存或恢复检查点,以在新会话中继续学习或预测。例如,您可以在 Tensorflow 中看到以下内容:
tf.train.Saver 类提供了保存和恢复模型的方法。tf.train.Saver 构造函数为图中的所有变量或指定列表添加保存和恢复操作到图中。Saver 对象提供了运行这些操作的方法,指定要写入或读取的检查点文件的路径。
有关 Tensorflow 中的更多详细信息,您可以点击此链接。
要完成此案例,您可以在此链接中的另一个库(例如 CNTK)中关注此主题。
拥有更多数据可能并不意味着您有在线学习。如果您假设即将到来的新数据样本不会有任何概念漂移,则上述答案是正确的。这意味着真实的数据生成分布可能会发生变化,即您当前的(最新模型)与新数据分布的最佳最小值相距甚远。我建议您阅读有关“概念漂移”的更多信息,并了解您的数据是否会有任何概念漂移。尝试搜索 NN 如何处理概念漂移。不幸的是,我不知道有任何技术或方法可以使 NN 适应概念漂移。如果您不期望任何概念漂移,那么如果您使用随机梯度下降,则保存检查点并继续训练将是一个很好的解决方案