首页 > 解决方案 > Deeplearning4j 中的时期和迭代

问题描述

我最近开始学习 Deeplearning4j,但我无法理解 epoch 和迭代的概念是如何实际实现的。在在线文档中它说:

一个时期是通过给定数据集的完整传递......
不要与迭代混淆,迭代只是神经网络模型参数的一次更新。

我使用 MultipleEpochsIterator 进行了训练,但在第一次运行中,我设置了 1 个 epoch,miniBatchSize = 1 和 1000 个样本的数据集,所以我希望训练在 1 个 epoch 和 1000 次迭代后完成,但在超过 100.000 次迭代后它是仍在运行。

int nEpochs = 1;
int miniBatchSize = 1;

MyDataSetFetcher fetcher = new MyDataSetFetcher(xDataDir, tDataDir, xSamples, tSamples);
//The same batch size set here was set in the model
BaseDatasetIterator baseIterator = new BaseDatasetIterator(miniBatchSize, sampleSize, fetcher);

MultipleEpochsIterator iterator = new MultipleEpochsIterator(nEpochs, baseIterator);
model.fit(iterator)

然后我做了更多的测试来改变批量大小,但这并没有改变 IterationListener 打印的日志行的频率。我的意思是,我认为如果我将批量大小增加到 100,那么对于 1000 个样本,我将只有 10 次参数更新,因此只有 10 次迭代,但日志和时间戳间隔或多或少是相同的。

顺便提一句。有一个类似的问题,但答案并没有真正回答我的问题,我想更好地了解实际细节: Deeplearning4j: Iterations, Epochs, and ScoreIterationListener

标签: deep-learningdeeplearning4j

解决方案


在 1.x(已经在 alpha 版本中)之后,这些都不重要了——我们很久以前就摆脱了迭代。

最初它是一种快捷语法,因此人们不必编写 for 循环。

现在只关注带有 epoch 的 for 循环。


推荐阅读