什么是监听器?
监听器允许用户在Eclipse DL4J中“挂钩”到某些事件中。这允许你收集或打印对训练等任务有用的信息。例如,一个ScoreIterationListener
允许你从神经网络的输出层打印训练分数。
用法
要将一个或多个监听器添加到一个多层网络或计算图中,请使用addListener
方法:
MultiLayerNetwork model = new MultiLayerNetwork(conf);
model.init();
//打印每次迭代的分数
model.setListeners(new ScoreIterationListener(1));
可用的监听器
EvaluativeListener (评估监听器)
该训练监听器的实现为训练过程中的模型评估提供了简单的方法。它可以按每个第X次迭代被启动,这取决于频率和调用类型构造函数参数。
EvaluativeListener
public EvaluativeListener(@NonNull DataSetIterator iterator, int frequency)
此回调将在完成评估后调用。
iterationDone
public void iterationDone(Model model, int iteration, int epoch)
- 参数 iterator 为评估提供数据的迭代器
- 参数 frequency 频率(根据调用类型的迭代次数)执行评估
- 参数 type “频率”的值类型-迭代结束等
TimeIterationListener (时间迭代监听器)
时间迭代监听器。这个监听器显示信息按分钟记录剩余的时间和进程结束的日期。剩余时间由训练的时间量和用户指定的迭代次数来估计。
TimeIterationListener
public TimeIterationListener(int iterationCount)
构造器
- 参数 iterationCount 训练的迭代次数
CheckpointListener(检查点监听器)
CheckpointListener: 这个监听器的目标是周期性地在训练期间保存模型的副本。
模型可以按如下方式被保存:
- 每 N 次epoch
- 每 N 次迭代
- 每个T时间单位(例如每15分钟)或者3者的某种结合。
例 1: 每隔2个epoch保存一个检查点,保存所有模型文件
.keepAll() //不要删除任何模型 .saveEveryNEpochs(2) .build() }
例 2: 每1000次迭代保存一个检查点,但是只保留最后3个模型(所有旧模型文件都将自动删除)
.keepLast(3) .saveEveryNIterations(1000) .build(); }
例 3: 每隔15分钟保存一个检查点,保存最新的3个,不然保存每第四个检查点文件:
.keepLastAndEvery(3, 4) .saveEvery(15, TimeUnit.MINUTES) .build(); }
注意,你可以混合这些:例如,每一个epoch和每15分钟进行保存(独立于最后的保存时间):
每一个epoch进行保存,每15分钟,从最后一个模型保存使用:
注意,这是最后一个例子,sinceLast参数是true。这意味着在保存模型时,15分钟计数器将在任何时间被重置。
CheckpointListener
public CheckpointListener build()
列出所有可用的检查点。如果文件可以加载,则检查点为“可用”。任何已被自动删除的检查点文件(给定配置)将不在这里返回。
- 返回可被加载的检查点文件列表
ScoreIterationListener (分数迭代监听器)
分数迭代监听器。在每N次迭代训练时报告网络的得分(损失函数的值)
ScoreIterationListener
public ScoreIterationListener(int printIterations)
- 参数 printIterations 打印分数的频率 (即 每个 printIterations 参数更新)
ParamAndGradientIterationListener (对数与梯度迭代监听器)
在每次迭代期间提供关于参数和梯度的细节的迭代监听器。尝试提供与UI直方图迭代监听器大致相同的信息,但采用基于文本的格式(例如,当学习通过SSH访问的系统时,等等)。即,旨在帮助网络调整和调试。
该迭代监听器被设置为计算网络中每种类型的参数和梯度在每次迭代时的平均值、最小值、最大值和平均绝对值。
SleepyTrainingListener(休睡训练监听器)
这种训练监听器的实现提供了一种在特定神经网络训练阶段中“睡眠”的方法。
适合调试或测试的目的。
请注意:所有计时器都将时间值视为毫秒。请注意:不要在生产环境中使用。
onEpochStart
public void onEpochStart(Model model)
在这种模式下,将使用parkNanos()调用,使进程真正空闲。
ComposableIterationListener (组合迭代监听器)
一组监听器
SharedGradient (共享梯度)
CollectScoresIterationListener (分数收集迭代监听器)
CollectScoresIterationListener只是每1或N次迭代在内部(连同迭代)存储模型分数(这是可配置的)。然后可以获得或导出这些分数。
CollectScoresIterationListener
public CollectScoresIterationListener()
以默认保存频率为1收集分数的构造函数
iterationDone
public void iterationDone(Model model, int iteration, int epoch)
以指定频率收集分数的构造函数
- 参数 frequency 用以收集/保存分数的频率
exportScores
public void exportScores(OutputStream outputStream) throws IOException
以制表符分割(每行一个)的 UTF-8格式导出分数。
exportScores
public void exportScores(OutputStream outputStream, String delimiter) throws IOException
以自定义分割符(每行一个)的 UTF-8格式导出分数。
- 参数 outputStream 用于写入的流
- 参数 delimiter 使用的分割符
exportScores
public void exportScores(File file) throws IOException
以制表符分割(每行一个)的 UTF-8格式导出分数。
- 参数 file 用于写入的文件
exportScores
public void exportScores(File file, String delimiter) throws IOException
使用指定的分割符将分值导出到文件中,按分割的(每行一行)UTF-8格式。
- 参数 file 用于写入的文件
- 参数 delimiter 用于写分数的分割符
CollectScoresListener (分数收集监听器)
一个简单的监听器,每N次迭代将分数收集到一个列表中。也可以选择记录分数。
Checkpoint (检查点)
PerformanceListener (性能监听器)
的迭代监听器,它跟踪每次迭代的训练花费时间。
PerformanceListener
public PerformanceListener build()
此方法定义,迭代数应是否与其他数据一起报告。
- 参数 reportIteration
- return