问题标签 [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 回答
549 浏览

python - 如何使用 Pytorch 中的截断反向传播(闪电)在很长的序列上运行 LSTM?

我有一个很长的时间序列,我想输入 LSTM 以进行每帧分类。

我的数据是按帧标记的,我知道一些罕见的事件发生后会严重影响分类。

因此,我必须输入整个序列才能获得有意义的预测。

众所周知,仅将非常长的序列输入 LSTM 是次优的,因为梯度会像正常的 RNN 一样消失或爆炸。


我想使用一种简单的技术将序列切割成更短(比如 100 长)的序列,并在每个序列上运行 LSTM,然后将最终的 LSTM 隐藏和单元状态作为下一个前向传递的开始隐藏和单元状态传递.

是我发现的一个例子。在那里它被称为“通过时间截断的反向传播”。我无法为我做同样的工作。


我在 Pytorch 闪电中的尝试(去掉了不相关的部分):

运行此代码会出现以下错误:

如果我添加也会发生同样的情况

如果我使用该错误不会发生

但显然这是没有用的,因为当前帧批次的输出不会转发到下一个。


是什么导致了这个错误?我认为分离输出应该足够了h_nc_n

如何将前一个帧批次的输出传递给下一个帧,并让火炬分别反向传播每个帧批次?

0 投票
1 回答
811 浏览

python - 使用 Pytorch Lightning 时如何将指标(例如验证损失)记录到 TensorBoard?

我正在使用 Pytorch Lightning 来训练我的模型(在 GPU 设备上,使用 DDP),TensorBoard 是 Lightning 使用的默认记录器。

我的代码设置为分别记录每个训练和验证步骤的训练和验证损失。

TensorBoard 在选项卡中正确绘制train_lossval_loss图表SCALERS。但是,在HPARAMS左侧栏中的选项卡中,仅hp_metric在 下可见Metrics

在此处输入图像描述

但是,在HPARAMS左侧栏中的选项卡中,仅hp_metric在 下可见Metrics

在此处输入图像描述

我们如何添加train_lossval_loss到该Metrics部分?这样,我们将能够使用val_lossinPARALLEL COORDINATES VIEW而不是hp_metric

图像显示hp_metric,没有val_loss 在此处输入图像描述

使用 Pytorch 1.8.1、Pytorch Lightning 1.2.6、TensorBoard 2.4.1

0 投票
1 回答
571 浏览

python - 如何在忽略类中使用 pytorch 闪电精度?

CrossEntropyLoss我有一些与忽略类一起使用的训练管道。

log_probs形状的模型输出(150, 3)- 意味着 3 个可能的类别,每批 150 个。

label_batchshape150torch.max(label_batch)== tensor(3, device='cuda:0'),意味着有一个额外的类被标记为3,它是忽略类。

损失处理得很好:

但是准确度指标认为类3是有效的并且给出了非常错误的结果:

self.train_acc = pl.metrics.Accuracy()

self.train_acc.update(log_probs, label_batch)由于标签的错误结果3应该被忽略。


如何正确使用pl.metrics.Accuracy()忽略类?

0 投票
2 回答
415 浏览

python - PyTorch Lightning:在检查点文件中包含一些张量对象

由于 Pytorch Lightning 为模型检查点提供了自动保存功能,因此我使用它来保存 top-k 最佳模型。特别是在培训师设置中,

这运行良好,但它不保存模型对象的某些属性。我的模型在每个训练时期结束时都会存储一些张量,这样

这是一个简化的示例,但我希望上面制作的检查点文件checkpoint_callback记住该属性self.some_data,但是当我从检查点加载模型时,它总是重置为None. 我确认它在培训期间成功更新。

我尝试不将其初始化为 None ,init但加载模型时该属性将消失。

我想避免将属性保存为不同的pt文件,因为它与模型配置相关联,因此我稍后需要手动将文件与相应的检查点文件匹配。

是否可以在检查点文件中包含这样的张量属性?

0 投票
1 回答
692 浏览

pytorch - 使用 pytorch 闪电的不同测试结果

我使用 Pytorch Lightning 来训练一个小的 NN 转移学习)和膜翅目照片(灵感来自这里)。

test_step方法中,它打印真实的类 ( classes ) 和预测 ( preds )。训练后,我做同样的事情(验证步骤),但得到不同的结果。

这是test_step方法的第一个输出:

现在是验证步骤的第一个输出:

两个是相同的(我检查了图像,它们是相同的),但预测值不同。它从何而来?

0 投票
0 回答
78 浏览

machine-learning - 用于直方图匹配的简单 Pytorch 模型不更新其参数

我目前正在尝试拟合一个非常简单的模型,该模型基本上应该为直方图匹配找到最佳直方图。我写了一个超级简单的模型,只有一个我直接使用的 Parameter 对象:

但是由于某种原因,反向传播没有通过并且参数没有得到更新。有人知道问题可能出在哪里吗?梯度实际上是存在的,并且确实会随着批次的变化而变化。我使用 pytorch 闪电删除样板代码,但症结应该在于我编写的代码。

0 投票
0 回答
1063 浏览

python - VS Code Python TensorBoard 集成不起作用

VS Code 的 Python 扩展最近发布了 TensorBoard 集成,但它似乎对我不起作用。

每当我从命令面板运行“Python:启动 TensorBoard”时,我都会看到 这个屏幕。这是 TensorBoard 页面,默认消息“当前数据集没有活动的仪表板”。命令 palate 命令有两个日志目录选项,“使用当前工作目录”和“选择另一个文件夹”,但似乎都不起作用。

但是,当我使用终端命令正常运行 TensorBoard 时

一切正常。这让我觉得我的日志目录和张量板安装设置得很好,问题出在 VS Code 或 Python 扩展上。

我应该提到我使用 PyTorch 和 PyTorch Lightning 生成了我的日志,而不是 Tensorflow。(对于上下文,我使用的是 macOS Big Sur)

有谁知道修复是什么?

0 投票
1 回答
58 浏览

python-3.x - Pytorch GAN 模型未训练:矩阵乘法错误

我正在尝试构建一个基本的 GAN 来熟悉 Pytorch。我对 Keras 有一些(有限的)经验,但由于我必须在 Pytorch 中做一个更大的项目,所以我想首先使用“基本”网络进行探索。

我正在使用 Pytorch 闪电。我想我已经添加了所有必要的组件。我尝试分别通过生成器和鉴别器传递一些噪声,我认为输出具有预期的形状。尽管如此,当我尝试训练 GAN 时出现运行时错误(下面的完整回溯):

RuntimeError: mat1 and mat2 shapes cannot be multiplied (7x9 and 25x1)

我注意到 7 是批次的大小(通过打印出批次尺寸),即使我将 batch_size 指定为 64。除此之外,老实说,我不知道从哪里开始:错误回溯没有帮我。

很可能,我犯了多个错误。但是,我希望你们中的一些人能够从代码中发现当前的错误,因为乘法错误似乎指向某个地方的维度问题。这是代码。

完整追溯:

0 投票
0 回答
256 浏览

python - 如何检查 Pytorch 闪电中的验证指标?

使用以下代码片段记录指标时:

我证实__common_epoch_end_report确实输入了 withmode='train'和 with mode='validation'

但是,只有从中记录的指标train可用于检查点:

收到以下错误:

如何允许通过 Pytorch-lightning 中的验证指标进行检查?

0 投票
1 回答
718 浏览

python - Pytorch-lightning 中的 `on_validation_epoch_end` 和 `validation_epoch_end` 有什么区别?

在内部LightningModule,Pycharm 允许 2 种自动完成方法:

on_validation_epoch_end参考hooks.py

validation_epoch_end称为导致。evaluation_loop.py_eval_results = model.validation_epoch_end(eval_results)__run_eval_epoch_end


每个人的目的是什么?

我只能假设一个已被弃用。找不到任何相关文档。