deep-learning - 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
解决方案
在 1.x(已经在 alpha 版本中)之后,这些都不重要了——我们很久以前就摆脱了迭代。
最初它是一种快捷语法,因此人们不必编写 for 循环。
现在只关注带有 epoch 的 for 循环。
推荐阅读
- google-bigquery - BigQuery 数据传输服务 - 调度程序不起作用
- angular - 使用 Angular 6 中的 JSON 过滤
- xamarin.forms - 如何将滑动点添加到选项卡式/轮播页面?
- python - 在两个字典之间映射的 Pythonic 方法,其中一个字典具有嵌套键
- qml - FileDialog(QtQuick Object)中实例化一个c++类,报错:Cannot assign object to property
- python-2.7 - Python IndentationError - Lambda 备份
- reactjs - 单选按钮的选中值未突出显示
- karabiner - 鼠标按钮作为修饰符
- ios - 如何使 Objective-C 泛型与 Swift 一起工作
- java - Ubuntu 上 Docker 中的 MySQL:警告:全局可写配置文件被忽略