问题标签 [pytorch-lightning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
742 浏览

python - 在 PyTorch Lightning 中运行多个模型的问题

我正在开发一个系统,该系统需要使用 Lightning 训练数十个单独的模型(>50 个),每个模型都有自己的 TensorBoard 图和日志。我当前的实现每个模型有一个 Trainer 对象,当我超过约 90 个 Trainer 对象时,我似乎遇到了这个错误。有趣的是,该错误仅在我运行 .test() 方法时出现,而不是在 .fit() 期间出现:

当我刚开始使用 Lightning 时,我不确定拥有一个培训师/模型是否是最好的方法。但是,我需要每个模型的单独图,并且似乎如果我对多个模型使用单个训练器,结果会被覆盖。

作为参考,我正在定义不同的培训师列表:

至于训练:

和测试:

谢谢!

0 投票
1 回答
4375 浏览

pytorch - 从检查点加载模型不起作用

我训练了一个我从这个存储库修改的香草 vae 。当我尝试使用经过训练的模型时,我无法使用load_from_checkpoint. 我的检查点对象和我的对象之间似乎不匹配lightningModule

我已经VAEXperiment使用pytorch-lightning LightningModule. 我尝试将权重加载到网络中:

我也试过:

但我得到一个错误 Unexpected key(s) in state_dict: "model.encoder.0.0.weight", "model.encoder.0.0.bias"......

我还在 https://github.com/PyTorchLightning/pytorch-lightning/issues/924 https://github.com/PyTorchLightning/pytorch-lightning/issues/2798上关注了这个问题

为什么我会收到此错误?是因为我的模型中的编码器和解码器模块吗?根据 git 上的问题日志,似乎错误已解决。我究竟做错了什么?

0 投票
2 回答
969 浏览

python - 权重和偏差扫描无法使用 pytorch 闪电导入模块

我正在使用 pytorch-lightning 训练变分自动编码器。我的 pytorch-lightning 代码与权重和偏差记录器一起使用。我正在尝试使用 W&B 参数扫描进行参数扫描。

超参数搜索过程基于我从这个 repo 中遵循的内容。

运行正确初始化,但是当我的训练脚本使用第一组超参数运行时,我收到以下错误:

yaml已安装并且工作正常。我可以通过手动设置参数来训练网络,但不能使用参数扫描。

这是我训练 VAE 的扫描脚本:

为什么我会收到此错误?

0 投票
0 回答
30 浏览

computer-vision - 为什么卷积网络的输出这么大?

我正在尝试使用 Lightning 在 PyTorch 中使用Ternausnet在 Carvana 数据集上重现 unet 结果。

我正在使用 DiceLoss 和 sigmoid 激活函数。我想我遇到了梯度消失的问题,因为所有的权重梯度都是 0,我看到网络的输出最小值为 10^8。

这里可能是什么问题?如何解决消失的梯度?此外,如果我使用不同的标准,我会看到损失在不停止的情况下变为负值的问题(例如,对于带有 logits 的 BCE)。

这是我的骰子损失的代码:

0 投票
1 回答
602 浏览

pytorch - pytorch-lightning 中的正态分布采样

Pytorch-Lightning中,您通常不必指定 cuda 或 gpu。但是当我想创建一个高斯采样张量时,torch.normal我得到

那么,我该如何更改才能torch.normal使 pytorch-lightning 正常工作?因为我在 cpu和gpu上的不同机器上使用代码

0 投票
1 回答
518 浏览

pytorch - What is the correct way to implement gradient accumulation in pytorch?

Broadly there are two ways:

  1. Call loss.backward() on every batch, but only call optimizer.step() and optimizer.zero_grad() every N batches. Is it the case that the gradients of the N batches are summed up? Hence to maintain the same learning rate per effective batch, we have to divide the learning rate by N?

  2. Accumulate loss instead of gradient, and call (loss / N).backward() every N batches. This is easy to understand, but does it defeat the purpose of saving memory (because the gradients of the N batches are computed at once)? The learning rate doesn't need adjusting to maintain the same learning rate per effective batch, but should be multiplied by N if you want to maintain the same learning rate per example.

Which one is better, or more commonly used in packages such as pytorch-lightning? It seems that optimizer.zero_grad() is a prefect fit for gradient accumulation, therefore (1) should be recommended.

0 投票
1 回答
3895 浏览

python - 无法从 Pytorch-Lightning 中的检查点加载模型

我正在使用 Pytorch Lightning 中的 U-Net。我能够成功地训练模型,但是在训练后,当我尝试从检查点加载模型时,我得到了这个错误:

完整的追溯:

我尝试浏览 github 问题和论坛,但无法弄清楚问题所在。请帮忙。

这是我的模型和检查点加载步骤的代码:
模型:

主功能:

0 投票
1 回答
402 浏览

pytorch - 将 Captum 与 Pytorch Lightning 一起使用?

所以我尝试将 Captum 与 PyTorch Lightning 一起使用。将模块传递给 Captum 时遇到问题,因为它似乎对张量进行了奇怪的重塑。例如,在下面的最小示例中,闪电代码可以轻松运行。但是当我将 IntegratedGradient 与“n_step>=1”一起使用时,我遇到了一个问题。LighningModule 的代码我想说的并不重要,我想知道最底部的代码行。

有谁知道如何解决这个问题?

0 投票
0 回答
253 浏览

python - 二进制分类的损失没有减少

我正在尝试实现二进制分类。我有 100K(3 通道,224 x 224px 预调整大小)图像数据集,我正在尝试训练模型以判断图片是否可以安全工作。我是具有统计学家背景的数据工程师,所以我正在研究这个模型,就像过去 5-10 天一样。我试图根据建议实施解决方案,但不幸的是损失并没有减少。

这是使用 PyTorch Lightning 实现的类,

这是自定义日志输出,

该问题可能与优化器或损失函数有关,但我无法弄清楚。

0 投票
2 回答
1659 浏览

python - 将 ddp 后端与 PyTorch Lightning 一起使用时验证整个验证集

我正在使用 PyTorch Lightning 训练图像分类模型并在具有多个 GPU 的机器上运行,因此我使用推荐的分布式后端以获得最佳性能ddp(DataDistributedParallel)。这自然会拆分数据集,因此每个 GPU 只会看到数据的一部分。

但是,对于验证,我想计算整个验证集的准确性等指标,而不仅仅是部分。我该怎么做?我在官方文档中发现了一些提示,但它们没有按预期工作或让我感到困惑。正在发生的事情是每个validation_epoch_end都称为验证数据的num_gpus时间1/num_gpus。我想汇总所有结果并且只运行validation_epoch_end一次。

本节中,他们声明在使用 dp/ddp2 时,您可以添加一个附加函数,如下所示

然而,结果并没有被聚合,validation_epoch_end仍然被称为num_gpu时间。这种行为不可用ddp吗?还有其他方法可以实现这种聚合行为吗?