Deeplearning4j
Community ForumND4J JavadocDL4J Javadoc
ZH 1.0.0-beta6
ZH 1.0.0-beta6
  • 核心概念
  • 开始
    • 快速入门
    • 速查表
    • 示例教程
    • 初学者
    • Eclipse贡献者
    • 从源码构建
    • 贡献
    • 基准测试准则
    • 关于
    • 发行说明
  • 配置
    • GPU/CPU设置
    • CPU 与 AVX
    • 内存管理
    • Maven
    • SBT/Gradle和其它构建工具
    • cuDNN
    • 快照
    • 内存工作间
  • ND4J
    • 快速入门
    • 概述
  • SAMEDIFF
    • 变量
    • 操作
    • 添加操作
  • 调优与训练
    • 故障排查
    • 可视化
    • 评估
    • 迁移学习
    • 早停
    • T-SNE数据可视化
  • 分布式深度学习
    • 介绍与入门
    • 在Spark上使用DL4J:操作指南
    • 技术说明
    • Spark数据管道指南
    • API参考
    • 参数服务器
  • Keras导入
    • 概述
    • 入门
    • 支持功能
      • 正则化器
      • 损失
      • 初始化器
      • 约束
      • 激活
      • 优化器
    • Functional模型
    • Sequential模型
  • ARBITER
    • 概述
    • 层空间
    • 参数空间
  • DATAVEC
    • 概述
    • 记录
    • 概要
    • 序列化
    • 转换
    • 分析
    • 读取器
    • 执行器
    • 过滤器
    • 运算
  • 语言处理
    • 概述
    • Word2Vec
    • Doc2Vec
    • SentenceIterator
    • Tokenization
    • Vocabulary Cache
  • 模型
    • 计算图
    • 多层网络
    • 循环神经网络
    • 层
    • 顶点
    • 迭代器
    • 监听器
    • 自定义层
    • 模型持久化
    • 动物园用法
    • 激活
    • 更新器
  • 移动端
    • Android概述
    • Android先决条件
    • Android分类器
    • Android图片分类器
  • FAQ
  • 新闻
  • 支持
  • 为什么要深度学习?
Powered by GitBook
On this page
  • 什么是早停?
  • 早停并行包装器
  • API

Was this helpful?

Edit on Git
Export as PDF
  1. 调优与训练

早停

在特定条件下终止训练。

Previous迁移学习NextT-SNE数据可视化

Last updated 5 years ago

Was this helpful?

什么是早停?

在训练神经网络时,需要对使用的设置(超参数)作出许多决策,以便获得良好的性能。一旦这样的超参数是训练epochs的数目:也就是说,数据集(epochs)的完整传递应该有几次?如果我们使用太少的epochs,我们可能欠拟合(即,不能从训练数据中学习我们能学的所有);如果我们使用太多的epochs,我们可能过拟合(即,在训练数据中拟合“噪声”,而不是信号)。 早期停止尝试删除手动设置该值的需要。它也可以被认为是一种正则化方法(如L1/L2权重衰减和丢弃),因为它可以阻止网络过拟合。

早停的思想相对简单:

  • 将数据分割成训练集和测试集

  • 在每个epoch的末尾(或每N个epoch):

    • 评估测试集上的网络性能

    • 如果网络性能超过以前的最佳模型:在当前epoch保存网络的副本

  • 作为最终模型,具有最佳测试集性能的模型

下面用图形显示:

最好的模型是在垂直虚线时保存的模型,即在测试集上具有最高准确率的模型。 使用DL4J的早停功能需要你提供一些配置选项:

  • 我们想要计算分数函数的频率(默认值:每个epoch)

  • 一个或多个终止条件,它告诉训练过程何时停止。停止条件有两类:

    • Epoch终止条件:每N个epoch评估

    • 迭代终止条件: 每个小批量评估一次

  • 一个模型保存器,它定义了如何保存模型。

例如,在epoch终止条件最大为30epoch、最大为20分钟的训练时间的情况下,计算每个epoch的得分,并将中间结果保存到磁盘:


MultiLayerConfiguration myNetworkConfiguration = ...;
DataSetIterator myTrainData = ...;
DataSetIterator myTestData = ...;

EarlyStoppingConfiguration esConf = new EarlyStoppingConfiguration.Builder()
		.epochTerminationConditions(new MaxEpochsTerminationCondition(30))
		.iterationTerminationConditions(new MaxTimeIterationTerminationCondition(20, TimeUnit.MINUTES))
		.scoreCalculator(new DataSetLossCalculator(myTestData, true))
        .evaluateEveryNEpochs(1)
		.modelSaver(new LocalFileModelSaver(directory))
		.build();

EarlyStoppingTrainer trainer = new EarlyStoppingTrainer(esConf,myNetworkConfiguration,myTrainData);

//执行早停训练
EarlyStoppingResult result = trainer.fit();

//打印结果
System.out.println("Termination reason: " + result.getTerminationReason());
System.out.println("Termination details: " + result.getTerminationDetails());
System.out.println("Total epochs: " + result.getTotalEpochs());
System.out.println("Best epoch number: " + result.getBestModelEpoch());
System.out.println("Score at best epoch: " + result.getBestModelScore());

//得到最佳模型:
MultiLayerNetwork bestModel = result.getBestModel();

你还可以实现自己的迭代和epoch终止条件。

早停并行包装器

上面描述的早停实现将仅用于单个设备。然而,EarlyStoppingParallelTrainer提供与早期停止类似的功能,并允许你为多个CPU或GPU进行优化。EarlyStoppingParallelTrainer将你的模型包装在ParallelWrapper类中,并执行本地化的分布式训练。

请注意,EarlyStoppingParallelTrainer并不支持作为其单个设备使用时所具有的所有功能。它不是UI兼容的,可能无法与复杂的迭代监听器一起工作。这是由于模型是在后台分发和复制的机置引起的。

API

得分计算器,如多层网络的DataSetLossCalculator(, )或计算图的DataSetLossCalculatorCG (, )。用于在每个epoch进行计算(例如:测试集上的损失函数值或测试集上的准确率)

JavaDoc
Source Code
JavaDoc
Source Code