问题标签 [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.
python - 在 PyTorch Lightning 中运行多个模型的问题
我正在开发一个系统,该系统需要使用 Lightning 训练数十个单独的模型(>50 个),每个模型都有自己的 TensorBoard 图和日志。我当前的实现每个模型有一个 Trainer 对象,当我超过约 90 个 Trainer 对象时,我似乎遇到了这个错误。有趣的是,该错误仅在我运行 .test() 方法时出现,而不是在 .fit() 期间出现:
当我刚开始使用 Lightning 时,我不确定拥有一个培训师/模型是否是最好的方法。但是,我需要每个模型的单独图,并且似乎如果我对多个模型使用单个训练器,结果会被覆盖。
作为参考,我正在定义不同的培训师列表:
至于训练:
和测试:
谢谢!
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 上的问题日志,似乎错误已解决。我究竟做错了什么?
python - 权重和偏差扫描无法使用 pytorch 闪电导入模块
我正在使用 pytorch-lightning 训练变分自动编码器。我的 pytorch-lightning 代码与权重和偏差记录器一起使用。我正在尝试使用 W&B 参数扫描进行参数扫描。
超参数搜索过程基于我从这个 repo 中遵循的内容。
运行正确初始化,但是当我的训练脚本使用第一组超参数运行时,我收到以下错误:
yaml
已安装并且工作正常。我可以通过手动设置参数来训练网络,但不能使用参数扫描。
这是我训练 VAE 的扫描脚本:
为什么我会收到此错误?
computer-vision - 为什么卷积网络的输出这么大?
我正在尝试使用 Lightning 在 PyTorch 中使用Ternausnet在 Carvana 数据集上重现 unet 结果。
我正在使用 DiceLoss 和 sigmoid 激活函数。我想我遇到了梯度消失的问题,因为所有的权重梯度都是 0,我看到网络的输出最小值为 10^8。
这里可能是什么问题?如何解决消失的梯度?此外,如果我使用不同的标准,我会看到损失在不停止的情况下变为负值的问题(例如,对于带有 logits 的 BCE)。
这是我的骰子损失的代码:
pytorch - pytorch-lightning 中的正态分布采样
在Pytorch-Lightning中,您通常不必指定 cuda 或 gpu。但是当我想创建一个高斯采样张量时,torch.normal
我得到
那么,我该如何更改才能torch.normal
使 pytorch-lightning 正常工作?因为我在 cpu和gpu上的不同机器上使用代码
pytorch - What is the correct way to implement gradient accumulation in pytorch?
Broadly there are two ways:
Call
loss.backward()
on every batch, but only calloptimizer.step()
andoptimizer.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?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.
python - 无法从 Pytorch-Lightning 中的检查点加载模型
我正在使用 Pytorch Lightning 中的 U-Net。我能够成功地训练模型,但是在训练后,当我尝试从检查点加载模型时,我得到了这个错误:
完整的追溯:
我尝试浏览 github 问题和论坛,但无法弄清楚问题所在。请帮忙。
这是我的模型和检查点加载步骤的代码:
模型:
主功能:
pytorch - 将 Captum 与 Pytorch Lightning 一起使用?
所以我尝试将 Captum 与 PyTorch Lightning 一起使用。将模块传递给 Captum 时遇到问题,因为它似乎对张量进行了奇怪的重塑。例如,在下面的最小示例中,闪电代码可以轻松运行。但是当我将 IntegratedGradient 与“n_step>=1”一起使用时,我遇到了一个问题。LighningModule 的代码我想说的并不重要,我想知道最底部的代码行。
有谁知道如何解决这个问题?
python - 二进制分类的损失没有减少
我正在尝试实现二进制分类。我有 100K(3 通道,224 x 224px 预调整大小)图像数据集,我正在尝试训练模型以判断图片是否可以安全工作。我是具有统计学家背景的数据工程师,所以我正在研究这个模型,就像过去 5-10 天一样。我试图根据建议实施解决方案,但不幸的是损失并没有减少。
这是使用 PyTorch Lightning 实现的类,
这是自定义日志输出,
该问题可能与优化器或损失函数有关,但我无法弄清楚。
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
吗?还有其他方法可以实现这种聚合行为吗?