问题标签 [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.
pytorch - 使用 pytorch-lightning 进行简单预测的示例
我有一个现有的模型,我在其中加载一些预训练的权重,然后在 pytorch 中进行预测(一次一张图像)。我正在尝试将其基本上转换为 pytorch 闪电模块,并且对一些事情感到困惑。
所以目前,我__init__
的模型方法如下所示:
我可以从闪电文档中收集到的信息,我几乎可以做同样的事情,除了不cuda()
打电话。所以像:
所以,我的第一个问题是这是否是使用闪电的正确方法?闪电如何知道它是否需要使用 GPU?我猜这需要在某处指定。
现在,对于预测,我有以下设置:
这是让我感到困惑的一点。我需要重写哪些函数才能进行与闪电兼容的预测?
此外,目前,输入是一个 numpy 数组。这是闪电模块可以实现的,还是总是需要使用某种数据加载器?
在某些时候,我想扩展这个模型实现来进行训练,所以想确保我做对了,但是虽然大多数例子都集中在训练模型上,一个简单的例子是在生产时对单个图像进行预测/数据点可能有用。
我在 GPU 上使用 0.7.5 和 pytorch 1.4.0 和 cuda 10.1
pytorch - 如何在 PyTorch Lightning 中编写多个训练设置
我想迭代地量化我的模型。这意味着在通常实现的正常训练循环之后,training_step
我想迭代地量化一些参数并重新训练模型几个步骤。
我真的不明白这将如何在 Lightning 中完成。我可以向班级添加一个新实例,但是我必须自己再次编写训练循环?
python - pythorch-lightning train_dataloader 用完数据
我开始使用 pytorch-lightning 并遇到了自定义数据加载器的问题:
我使用自己的数据集和通用的 torch.utils.data.DataLoader。基本上,数据集采用路径并加载与数据加载器加载的给定索引相对应的数据。
当我使用 pytorch-lightning 模块时train_dataloader
,training_step
一切运行良好。当我添加val_dataloader
并validation_step
遇到此错误时:
在这种情况下,我的数据集非常小(用于测试功能),只有 84 个样本,我的批量大小为 8。用于训练和验证的数据集具有相同的长度(仅用于测试目的)。
所以总共有 84 * 2 = 168 和 168 / 8 (batchsize) = 21,大致就是上面显示的总步数 (22)。这意味着在训练数据集上运行 10 次 (10 * 8 = 80) 后,加载器期望新的完整样本为 8,但由于只有 84 个样本,我得到一个错误(至少这是我目前的理解)。
我在自己的实现中遇到了类似的问题(不使用 pytorch-lighntning)并使用这种模式来解决它。基本上,当数据用完时,我正在重置迭代器:
现在看来我面临类似的事情?当我的 training_dataloader 数据不足时,我不知道如何在 pytorch-lightning 中重置/重新初始化数据加载器。我想一定有另一种我不熟悉的复杂方式。谢谢
python - Pytorch 闪电,张量板:TypeError:无法腌制 _thread.lock 对象
这是我的错误。我不知道我的错误是什么。我真的不知道现在该怎么办。我正在使用带有张量板的 PyTorch-lightning。我不知道这个错误来自哪里,如果你问我可以提供更多细节。我删除了几个错误信息,因为 StackOverflow 不允许我发布这么多代码。
python - RuntimeError: 给定组=1,大小为 [32, 3, 16, 16, 16] 的权重,预期输入 [100, 16, 16, 16, 3] 有 3 个通道,但有 16 个通道
RuntimeError: 给定组=1,大小为 [32, 3, 16, 16, 16] 的权重,预期输入 [100, 16, 16, 16, 3] 有 3 个通道,但有 16 个通道
这是我认为问题所在的代码部分。
这是我正在处理的代码
pytorch - BERT微调:多类分类中的高损失和低准确率
虽然使用微调的 Bert 进行二进制分类效果很好,但我仍然坚持使用多类分类。我的数据集(德国新闻文章,有 10 个类别)包含大约 10.000 个样本。虽然,训练损失和平均评估损失在 2.2 左右。
一些 NLP 配置变量:
数据加载器:
Pytorch_lightning 模块:
教练:
trainer.fit(模型)
这是一个样本损失曲线。
我的核心问题是:
- 是否正确使用了 CrossEntropyLoss?
- 优化器是否有效,因为每个样本的预测很快就会变得相同。
- 学习率问题并没有解决问题。我尝试了从 1e-2 到 1e-6 的范围
谢谢你的帮助。:)
pytorch - 微调(德语)伯特。是否欠拟合?
使用 pytorch-lightning 和 transformers,我在德国服务票上微调了一个 Bert 模型。数据集的大小如下:
每张票可以恰好属于 10 个类别中的 1 个。这就是为什么我的模型在 def init中初始化的原因,例如:
这为每个样本产生了 10 个类别的概率分布。由于前向功能是:
作为损失函数,torch.nn.CrossEntropyLoss 被定义并在 training_step 中被调用。Batch_Size 为 16,logits.shape = [16,10] 和 batch['targets'].shape = [16] 和 batch['targets'] = [1,5,2,4,8,6,9 ,0,0,1,2,7,7,7,5,3]。CrossEntropyLoss 是正确的损失函数吗?优化器是否还在工作?
验证步骤也是如此:
最后,无论得到什么输入序列,模型都会产生相同的概率。这是欠拟合吗?
一个例子是:
另一个例子是:
它是德语,但如您所见,预测完全匹配。这是一个耻辱 :D 我的问题。
python - PyTorch Lightning 将张量移动到 validation_epoch_end 中的正确设备
我想在 a 的validation_epoch_end
方法中创建一个新的张量LightningModule
。从官方文档(第 48 页)中可以看出,我们应该避免直接.cuda()
或.to(device)
调用:
没有 .cuda() 或 .to() 调用。. . 闪电为你做这些。
并鼓励我们使用type_as
方法转移到正确的设备。
new_x = new_x.type_as(x.type())
但是,在一个步骤中,validation_epoch_end
我没有任何张量可以从(通过type_as
方法)以干净的方式复制设备。
我的问题是,如果我想用这种方法创建一个新的张量并将其转移到模型在哪里的设备上,我该怎么办?
我唯一能想到的就是在outputs
字典中找到一个张量,但感觉有点乱:
有什么干净的方法可以实现这一目标吗?
pytorch - Pytorch动态层数?
我正在尝试指定动态数量的层,我似乎做错了。我的问题是,当我在这里定义 100 层时,我会在前进步骤中出错。但是当我正确定义图层时它会起作用吗?下面的简化示例
执行“ret = layer.forward(processed_slice)”时出现此错误
RuntimeError:设备类型为 cuda 的预期对象,但在调用 _th_addmm 时获得了参数 #1 'self' 的设备类型 cpu
有没有更聪明的方法来编程?或解决错误?
python - Pytorch-Lightning 是否具有多处理(或 Joblib)模块?
我一直在谷歌搜索,但似乎无法找到multiprocessing
Pytorch-Lightning 中是否有可用的模块,就像 Pytorch 有一个torch.multiprocessing
模块一样。
有谁知道 Pytorch-Lightning 是否有这个(或Joblib
类似的)模块?我正在寻找一个 Pytorch-Lightning 模块,它允许我在多个 GPU 上并行化
提前谢谢了。
编辑:更具体地说,我正在寻找multiprocessing
Pytorch-Lightning 中的一个模块,它允许我在非神经网络计算上并行化多个 GPU,例如: