我正在尝试执行一个Python文件,其中包含带有lightning和torchvision模块的pytorch。但是当我在 pi3 中下载并成功安装 pytorch 的 whl 文件后,我一次又一次地遇到同样的错误。错误是
ModuleNotFoundError: No module named 'pytorch_lightning.metrics'
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助,因为我被困了超过 3 天。我已经使用 pip 安装了模块。
我想用 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字典中找到一个张量,但感觉有点乱:
avg_loss = torch.stack([x['val_loss'] for x in outputs]).mean()
output = self(self.__test_input.type_as(avg_loss))
Run Code Online (Sandbox Code Playgroud)
有没有干净的方法来实现这一目标?
我试图指定动态的层数,但我似乎做错了。我的问题是,当我在这里定义 100 层时,我会在前进步骤中收到错误。但是当我正确定义图层时它会起作用吗?下面是简化的示例
class PredictFromEmbeddParaSmall(LightningModule):
def __init__(self, hyperparams={'lr': 0.0001}):
super(PredictFromEmbeddParaSmall, self).__init__()
#Input is something like tensor.size=[768*100]
self.TO_ILLUSTRATE = nn.Linear(768, 5)
self.enc_ref=[]
for i in range(100):
self.enc_red.append(nn.Linear(768, 5))
# gather the layers output sth
self.dense_simple1 = nn.Linear(5*100, 2)
self.output = nn.Sigmoid()
def forward(self, x):
# first input to enc_red
x_vecs = []
for i in range(self.para_count):
layer = self.enc_red[i]
# The first dim is the batch size here, output is correct
processed_slice = x[:, i * 768:(i + 1) * 768] …Run Code Online (Sandbox Code Playgroud) 我正在使用 PyTorch Lightning 训练图像分类模型,并在具有多个 GPU 的机器上运行,因此我使用推荐的分布式后端以获得最佳性能ddp(DataDistributedParallel)。这自然会分割数据集,因此每个 GPU 只能看到数据的一部分。
但是,对于验证,我想计算整个验证集(而不仅仅是一部分)的准确性等指标。我该怎么做呢?我在官方文档中找到了一些提示,但它们没有按预期工作或者让我感到困惑。所发生的情况validation_epoch_end称为每次验证数据的num_gpus次数。1/num_gpus我想汇总所有结果并只运行validation_epoch_end一次。
在本节中,他们指出,当使用 dp/ddp2 时,您可以添加一个附加函数,如下所示
def validation_step(self, batch, batch_idx):
loss, x, y, y_hat = self.step(batch)
return {"val_loss": loss, 'y': y, 'y_hat': y_hat}
def validation_step_end(self, self, *args, **kwargs):
# do something here, I'm not sure what,
# as it gets called in ddp directly after validation_step with the exact same values
return args[0]
Run Code Online (Sandbox Code Playgroud)
然而,结果并没有被聚合,validation_epoch_end仍然被称为num_gpu时间。这种行为不适合吗ddp?还有其他方法可以实现这种聚合行为吗?
python parallel-processing distributed-computing pytorch pytorch-lightning
有什么方法可以在使用 DDP 的多 GPU 上validation_step同时在单 GPU 上执行方法吗?training_step
我想要这样做的原因是因为我想要实现几个指标,这些指标需要完全访问数据,并且在单个 GPU 上运行将确保这一点。我尝试过validation_step_end方法,但不知何故我只获得了部分数据。该帖子在这里:Stack Overflow Post
PyTorch-Lightning 中的记录器打印有关要训练(或评估)的模型以及训练过程中的进度的信息,
但是,就我而言,我想隐藏记录器中的所有消息,以免淹没Jupyter Notebook.
我在官方文档页面上查看了 Trainer 类的 API https://pytorch-lightning.readthedocs.io/en/latest/common/trainer.html#trainer-flags,似乎没有选择关闭来自记录器的消息。
有一个参数log_every_n_steps可以设置为很大的值,但尽管如此,每个时期后的记录结果都会显示。
如何禁用日志记录?
在tensorflow keras中,当我训练模型时,它会在每个时期打印准确性和损失,我想使用pythorch lighting做同样的事情。
我已经创建了我的模块,但我不知道该怎么做。
import torch
import torch.nn as nn
from residual_block import ResidualBlock
import pytorch_lightning as pl
from torchmetrics import Accuracy
class ResNet(pl.LightningModule):
def __init__(self, block, layers, image_channels, num_classes, learning_rate):
super(ResNet, self).__init__()
self.in_channels = 64
self.conv1 = nn.Conv2d(
image_channels, 64, kernel_size=7, stride=2, padding=3, bias=False)
self.bn1 = nn.BatchNorm2d(64)
self.relu = nn.ReLU()
self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
self.layer1 = self._make_layer(
block, layers[0], intermediate_channels=64, stride=1)
self.layer2 = self._make_layer(
block, layers[1], intermediate_channels=128, stride=2)
self.layer3 = self._make_layer(
block, layers[2], intermediate_channels=256, stride=2)
self.layer4 = self._make_layer( …Run Code Online (Sandbox Code Playgroud) 我有一个地图类型数据集,用于实例分割任务。该数据集非常不平衡,有些图像只有 10 个对象,而其他图像则多达 1200 个。
如何限制每批次的对象数量?
一个最小的可重现示例是:
import math
import torch
import random
import numpy as np
import pandas as pd
from torch.utils.data import Dataset
from torch.utils.data.sampler import BatchSampler
np.random.seed(0)
random.seed(0)
torch.manual_seed(0)
W = 700
H = 1000
def collate_fn(batch) -> tuple:
return tuple(zip(*batch))
class SyntheticDataset(Dataset):
def __init__(self, image_ids):
self.image_ids = torch.tensor(image_ids, dtype=torch.int64)
self.num_classes = 9
def __len__(self):
return len(self.image_ids)
def __getitem__(self, idx: int):
"""
returns single sample
"""
# print("idx: ", idx)
# deliberately left dangling
# id = …Run Code Online (Sandbox Code Playgroud) dataset pytorch torchvision pytorch-lightning pytorch-dataloader
我有一个可以创建合成数据的生成器。如何将其转换为 PyTorch 数据加载器?
我正在使用 VQGAN+CLIP_(Zooming)_(z+quantize_method_with_addons).ipynb Google Repository,当我单击单元格“加载库和定义”时
\n它发送了一个错误:
\nImportError Traceback (most recent call last)\n<ipython-input-6-fe8fafeed45d> in <module>\n 24 from omegaconf import OmegaConf\n 25 from PIL import Image\n---> 26 from taming.models import cond_transformer, vqgan\n 27 import torch\n 28 from torch import nn, optim\n\n1 frames\n/content/taming-transformers/main.py in <module>\n 10 from pytorch_lightning.trainer import Trainer\n 11 from pytorch_lightning.callbacks import ModelCheckpoint, Callback, LearningRateMonitor\n---> 12 from pytorch_lightning.utilities.distributed import rank_zero_only\n 13 \n 14 from taming.data.utils import custom_collate\n\nImportError: cannot import name 'rank_zero_only' from 'pytorch_lightning.utilities.distributed' (/usr/local/lib/python3.7/dist-packages/pytorch_lightning/utilities/distributed.py)\nRun Code Online (Sandbox Code Playgroud)\n我不知道如何解决这个问题。我不知道如何手动安装 Pytorch,因为它说“注意:如果您的导入由于缺少软件包而失败,您可以使用 !pip 或 !apt …