如何解决Pytorch Lightning:在训练期间获取模型在完整训练数据上的输出
TL;DR: 在 on_train_epoch_start 期间,我想在所有训练数据上获得模型的输出,作为一些预训练计算的一部分。我在问什么是闪电友好的方式来做到这一点。
这是一个奇怪的问题。
在我的项目中,我每 10 个 epoch 选择完整训练数据的一个子集,并仅在该子集上进行训练。在计算使用哪个子集的部分过程中,我在训练数据集中的每个数据点上计算模型的输出。
我的问题是,在 pytorch 闪电中执行此操作的最佳方法是什么?目前我有一个带有 on_train_epoch_start
钩子的回调。在此挂钩期间,回调从 trainer.datamodule.train_dataloader()
创建自己的数据加载器,并手动迭代数据加载器,计算模型输出。这不太理想,对吧?
这让我遇到了 pytorch 闪电问题。例如,在 GPU 上训练时,我收到一个错误,因为我的回调使用的是它自己的数据加载器,而不是训练器的 train_dataloader
,所以它不在 GPU 上。但是,我无法使用训练器的 train_dataloader
,因为在我的回调选择其子集后,它会将训练器的 train_dataloader
更改为该子集,而不是完整数据集。
我想我有两个主要问题:
- 有什么办法可以避免制作单独的数据加载器?我可以以某种方式调用火车循环吗?在完整数据集上获取模型输出似乎是一个如此简单的操作,我认为它是单行的。
- 如何获取/使用与所有 Pytorch Lightning 自动修改同步的数据加载器? (例如 GPU/CPU、数据加载工作者、pin_memory)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。