我有一个 torch.utils.data.DataLoader。我使用以下代码创建了它们。
transform_train = transforms.Compose([
transforms.RandomCrop(32, padding=4),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])
trainset = CIFAR100WithIdx(root='.',
train=True,
download=True,
transform=transform_train,
rand_fraction=args.rand_fraction)
train_loader = torch.utils.data.DataLoader(trainset,
batch_size=args.batch_size,
shuffle=True,
num_workers=args.workers)
Run Code Online (Sandbox Code Playgroud)
但是当我运行以下代码时出现错误。
train_loader_2 = []
for i, (inputs, target, index_dataset) in enumerate(train_loader):
train_loader_2.append((inputs, target, index_dataset))
Run Code Online (Sandbox Code Playgroud)
错误是
Traceback (most recent call last):
File "main_superloss.py", line 460, in <module>
main()
File "main_superloss.py", line 456, in main
main_worker(args)
File "main_superloss.py", line 374, in main_worker
train_loader, val_loader = get_train_and_val_loader(args)
File "main_superloss.py", line 120, in get_train_and_val_loader
for …Run Code Online (Sandbox Code Playgroud) 我正在编译 PyTorch 教程网站上的一些现有示例。我主要在没有 GPU 的 CPU 设备上工作。
运行程序时,会显示以下错误类型。我正在处理 CPU 设备或设置问题吗?raise RuntimeError('DataLoader worker (pid(s) {}) exited unexpectedly'.format(pids_str)) from e
运行时错误:DataLoader 工作线程(pid(s) 15876, 2756)意外退出`。我该如何解决?
import torch
import torch.functional as F
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
from torch.utils.tensorboard import SummaryWriter
from torch.utils.data import DataLoader
from torchvision import datasets
device = 'cpu' if torch.cuda.is_available() else 'cuda'
print(device)
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))]
)
#Store separate …Run Code Online (Sandbox Code Playgroud) 在使用由自定义数据集制作的 Pytorch 数据加载器进行神经网络训练期间,我遇到了奇怪的行为。数据加载器设置为workers=4、pin_memory=False。
\n大多数时候,训练都没有问题地完成。\n有时,训练会随机停止,并出现以下错误:
\n看起来错误发生在创建套接字以访问数据加载器元素期间。\n当我将工作线程数设置为 0 时,该错误消失,但我需要通过多处理来加速我的训练。\n错误的根源可能是什么?谢谢 !
\nPython 3.9.12,Pyorch 1.11.0+cu102
\n编辑:该错误仅发生在集群上
Traceback (most recent call last):\n File "/my_directory/.conda/envs/geoseg/lib/python3.9/multiprocessing/resource_sharer.py", line 145, in _serve\nEpoch 17: 52%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x8f | 253/486 [01:00<00:55, 4.18it/s, loss=1.73]\n\nTraceback (most recent call last):\n File "/my_directory/bench/run_experiments.py", line 251, in <module>\n send(conn, destination_pid)\n File "/my_directory/.conda/envs/geoseg/lib/python3.9/multiprocessing/resource_sharer.py", line 50, in send\n reduction.send_handle(conn, new_fd, pid)\n File "/my_directory/.conda/envs/geoseg/lib/python3.9/multiprocessing/reduction.py", line 183, in send_handle\n with socket.fromfd(conn.fileno(), socket.AF_UNIX, …Run Code Online (Sandbox Code Playgroud) 运行我的代码时,我收到此错误消息“ RuntimeError:DataLoader worker (pid(s) 48817, 48818) 意外退出” 我完全不确定从哪里开始解决此问题。任何指导都将不胜感激。下面发布了代码和回溯
batch_size = 128
image_size = (64,64)
stats = (0.5, 0.5, 0.5), (0.5, 0.5, 0.5)
transform_ds = transforms.Compose([transforms.Resize(image_size),
# transforms.RandomCrop(32, padding=2),
# transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(*stats)
])
train_ds = facesDataset(csv_file = 'imagesdataset.csv', root_dir = 'images',
transform = transform_ds)
train_dl = DataLoader(train_ds, batch_size, shuffle=True, num_workers=3, pin_memory=True)
print(len(train_ds))
def denorm(img_tensors):
return img_tensors * stats[1][0] + stats[0][0]
def show_images(img, nmax=64):
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_xticks([]); ax.set_yticks([])
ax.imshow(make_grid(denorm(img.detach()[:nmax]), nrow=8).permute(1, 2, 0))
def show_batch(dl, nmax=64):
for img, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 pytorch 在 GPU 上运行神经网络,并且我的数据有一些不寻常的形状,因此我使用 Dataset 和 DataLoader 来生成数据批次。我的代码在 CPU 上运行良好,但我对何时是将数据放到 GPU 上的正确时机有点困惑:
batch.to("cuda")DataLoader 生成的每个批次吗?__getitem()___方法中返回 numpy 数组的数据集,或者将 numpy 数组转换为 pytorch 张量并编写返回 pytorch 张量的数据集。一种方法优于另一种方法吗?我用来Pytorch运行 Transformer 模型。当我想分割数据(标记化数据)时,我使用以下代码:
train_dataset, test_dataset = torch.utils.data.random_split(
tokenized_datasets,
[train_size, test_size])
Run Code Online (Sandbox Code Playgroud)
torch.utils.data.random_split使用洗牌方法,但我不想洗牌。我想按顺序分割它。
有什么建议吗?谢谢
我正在开发一个 ASR 项目,其中使用 HuggingFace ( ) 的模型wav2vec2。我现在的目标是将训练过程转移到 PyTorch,因此我尝试重新创建 HuggingFace\xe2\x80\x99sTrainer()类提供的所有内容。
这些实用程序之一是能够按长度对批次进行分组并将其与动态填充相结合(通过数据整理器)。但说实话,我什至不知道如何在 PyTorch 中开始这一点。
\n在我的例子中,输入是一维数组,表示 .wav 文件的原始波形。因此,在训练之前,我需要确保将相似大小的数组分批在一起。我是否需要创建一个自定义 Dataloader 类并对其进行更改,以便每次它都能为我提供长度尽可能接近的批量大小?
\n我的一个想法是以某种方式将数据从最短到最长(或相反)排序,并每次从中提取batch_size样本。这样,第一批将包含最大长度的样本,第二批将包含第二大长度的样本,依此类推。
\n尽管如此,我不确定如何实现这个实现。任何建议将不胜感激。
\n提前致谢。
\npytorch ×7
python ×4
dataloader ×1
dataset ×1
numpy ×1
python-3.x ×1
sockets ×1
torch ×1
torchvision ×1