标签: dataloader

不使用多处理,但在使用 PyTorch DataLoader 时在 google colab 上出现 CUDA 错误

我已将 GitHub 存储库克隆到 google colab 中,并尝试使用 PyTorch 的 DataLoader 加载数据。

global gpu, device
if torch.cuda.is_available():
    gpu = True
    device = 'cuda:0'
    torch.set_default_tensor_type('torch.cuda.FloatTensor')
    print("Using GPU")
else:
    gpu = False
    device = 'cpu'
    print("Using CPU")

data_transforms = transforms.Compose([
    #transforms.Resize(224),
    transforms.ToTensor(),
    transforms.Normalize([0.3112, 0.2636, 0.2047], [0.2419, 0.1972, 0.1554])
    ])
train_path = '/content/convLSTM/code/data/train/'
val_path = '/content/convLSTM/code/data/val/'
test_path = '/content/convLSTM/code/data/test/'

train_data = datasets.ImageFolder(root=train_path, transform=data_transforms)
val_data = datasets.ImageFolder(root=val_path, transform=data_transforms)
test_data = datasets.ImageFolder(root=test_path, transform=data_transforms)

train_loader = torch.utils.data.DataLoader(
    train_data,
    batch_size=18,
    num_workers=4,
    shuffle=False,
    pin_memory=True
    )

val_loader = torch.utils.data.DataLoader(
    val_data,
    batch_size=18, …
Run Code Online (Sandbox Code Playgroud)

pytorch google-colaboratory dataloader

3
推荐指数
1
解决办法
3329
查看次数

Pytorch 默认数据加载器因大型图像分类训练集而卡住

我正在 Pytorch 中训练图像分类模型,并使用其默认数据加载器来加载我的训练数据。我有一个非常大的训练数据集,因此每个类通常有几千个样本图像。过去我已经用大约 20 万张图像训练过模型,没有出现任何问题。然而我发现,当图像总数超过一百万张时,Pytorch 数据加载器就会卡住。

\n\n

我相信当我打电话时代码挂起datasets.ImageFolder(...)。当我按下 Ctrl-C 时,输出始终如下:

\n\n
Traceback (most recent call last):                                                                                                 \xe2\x94\x82\n  File "main.py", line 412, in <module>                                                                                            \xe2\x94\x82\n    main()                                                                                                                         \xe2\x94\x82\n  File "main.py", line 122, in main                                                                                                \xe2\x94\x82\n    run_training(args.group, args.num_classes)                                                                                     \xe2\x94\x82\n  File "main.py", line 203, in run_training                                                                                        \xe2\x94\x82\n    train_loader = create_dataloader(traindir, tfm.train_trans, shuffle=True)                                                      \xe2\x94\x82\n  File "main.py", line 236, in create_dataloader                                                                                   \xe2\x94\x82\n    dataset = datasets.ImageFolder(directory, trans)                                                                               \xe2\x94\x82\n  File "/home/username/.local/lib/python3.5/site-packages/torchvision/datasets/folder.py", line 209, in __init__     \xe2\x94\x82\n    is_valid_file=is_valid_file)                                                                                                   \xe2\x94\x82\n  File "/home/username/.local/lib/python3.5/site-packages/torchvision/datasets/folder.py", line 94, in __init__ …
Run Code Online (Sandbox Code Playgroud)

classification computer-vision deep-learning pytorch dataloader

3
推荐指数
1
解决办法
4673
查看次数

如何从pytorch dataloader获取批量迭代的总数?

我有一个问题,如何从 pytorch 数据加载器获取批量迭代的总数?

以下是训练的常用代码

for i, batch in enumerate(dataloader):
Run Code Online (Sandbox Code Playgroud)

那么,有没有什么方法可以获取“for循环”的总迭代次数?

在我的 NLP 问题中,总迭代次数不同于 int(n_train_samples/batch_size)...

例如,如果我只截断训练数据 10,000 个样本并将批大小设置为 1024,那么在我的 NLP 问题中会发生 363 次迭代。

我想知道如何获得“for 循环”中的总迭代次数。

谢谢你。

for-loop pytorch dataloader

3
推荐指数
1
解决办法
4567
查看次数

pytorch 数据加载器的示例或解释?

我对 Pytorch 相当陌生(并且从未做过高级编码)。我正在尝试使用 d2l.ai 教科书学习深度学习的基础知识,但在理解数据加载器代码背后的逻辑时遇到困难。我阅读了torch.utils.data 文档,但不确定 DataLoader 类的用途,以及例如我应该将 torch.utils.data.TensorDataset 类与其结合使用时。例如,d2l定义了一个函数:

def load_array(data_arrays, batch_size, is_train=True):
    """Construct a PyTorch data iterator."""
    dataset = data.TensorDataset(*data_arrays)
    return data.DataLoader(dataset, batch_size, shuffle=is_train)
Run Code Online (Sandbox Code Playgroud)

我认为这应该返回一个迭代不同批次的迭代。但是,我不明白 data.TensorDataset 部分的作用(似乎文档页面上列出了很多选项)。此外,文档还说有两种类型的数据集:可迭代数据集和地图样式数据集。在描述前一种类型时,它说

“这种类型的数据集特别适合随机读取成本昂贵甚至不可能的情况,并且批量大小取决于获取的数据。”

“随机读取成本昂贵或不可能”以及批量大小取决于获取的数据意味着什么?谁能举个例子吗?

如果有任何资源可以让像我这样的 CompSci 新手学习这些基础知识,我真的很感激!

非常感谢!

python pytorch dataloader

3
推荐指数
1
解决办法
4960
查看次数

使用复合键的 DataLoader

我了解 dataLoader 如何使用简单的键工作:

import DataLoader from 'dataloader';
import myService from './services/service';

export default () => new DataLoader((keys: any) => Promise.all(keys.map((key: string) => myService(key))));
Run Code Online (Sandbox Code Playgroud)

有使用复合键的好模式吗?

如果我需要使用纬度和经度之类的东西调用谷歌地图 api 怎么办?我的密钥需要是纬度和经度的独特组合,并且在调用我的服务时我需要拆分纬度和经度

const key = `${latitude}|${longitude}`;
Run Code Online (Sandbox Code Playgroud)

认为我可以使用映射来查找要根据键传递给我的服务的值,对于这样的用例是否有一个好的模式?

javascript typescript graphql dataloader

2
推荐指数
1
解决办法
3599
查看次数

将用户指定的参数传递给DataLoader

我正在使用 U-Net 并实现 2015 年(U-Net:用于生物医学的卷积网络\n图像分割)和 2019 年(U-Net \xe2\x80\x93 用于细胞计数、检测的深度学习)的论文中描述的加权技术,和形态测量)。在该技术中,存在方差 \xcf\x83 和权重 w_0。我希望,尤其是 \xcf\x83 成为一个可学习的参数,而不是猜测数据集之间哪个值最好。

\n
    \n
  1. 根据我的发现,我可以使用 nn.Parameter 来做到这一点。
  2. \n
  3. 为了使用学习到的 \xcf\x83 从一个纪元到另一个纪元,我需要以某种方式通过 DataLoader 将这个新值传递给 DataSet 的 get_item 函数。
  4. \n
\n

我目前对此的看法是扩展 torch.utils.data.DataLoader ,其中新的init有一个额外的参数接受用户指定/可学习的参数。鉴于 torch.utils.data.DataLoader 的源代码,我不明白 DataLoader 在何处以及如何调用 DataSet 实例并因此传递这些参数。

\n

代码方面,在 DataSet 定义中有该函数

\n
def __getitem__(self, index):\n
Run Code Online (Sandbox Code Playgroud)\n

我可以改变为

\n
def __getitem__(self, index, sigma):\n
Run Code Online (Sandbox Code Playgroud)\n

并利用更新后的、新学习的\xcf\x83。

\n

我的问题是,在训练期间,我迭代训练数据集

\n
for epoch in range( checkpoint[ 'epoch'], num_epochs):\n....\n    for ii, ( X, y, y_weight, fname) in enumerate( dataLoader[ phase]):\n …
Run Code Online (Sandbox Code Playgroud)

parameter-passing pytorch dataloader

2
推荐指数
1
解决办法
3330
查看次数

检查 python 数据加载器的内容

这可能是一个简单的问题,但是如何查看这个标准数据加载器的内容:

from torchtext import datasets
import random

train_data, test_data = datasets.IMDB.splits(TEXT, LABEL)
train_data, valid_data = train_data.split(random_state = random.seed(SEED))
Run Code Online (Sandbox Code Playgroud)

我无法使用 .head() 并且:

print(test_data)
Run Code Online (Sandbox Code Playgroud)

只是给了我:

<torchtext.datasets.imdb.IMDB object at 0x7f0b42e8c240>
Run Code Online (Sandbox Code Playgroud)

我可能只是缺少 .values 或 [0] 或类似的东西......

python pytorch dataloader

2
推荐指数
1
解决办法
6461
查看次数

将单个图加载到 pytorch 几何数据对象中以进行节点分类

我有一张图,由 4 个矩阵定义:(x节点特征)、y(节点标签)、edge_index(边列表)和edge_attr(边特征)。我想使用这个单一图形在 Pytorch Geometric 中创建一个数据集并执行节点级分类。由于某种原因,仅仅将这 4 个矩阵包装到一个对象中似乎data失败了。

我创建了一个包含属性的数据集:

Data(edge_attr=[3339730, 1], edge_index=[2, 3339730], x=[6911, 50000], y=[6911, 1])
Run Code Online (Sandbox Code Playgroud)

代表一个图。如果我尝试对这个图进行切片,例如:

train_dataset, test_dataset = dataset[:5000], dataset[5000:]
Run Code Online (Sandbox Code Playgroud)

我收到错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-feb278180c99> in <module>
      3 # train_dataset, test_dataset = torch.utils.data.random_split(dataset, [train_size, test_size])
      4 
----> 5 train_dataset, test_dataset = dataset[:5000], dataset[5000:]
      6 
      7 # Create dataloader for training and test dataset.

~/anaconda3/envs/py38/lib/python3.8/site-packages/torch_geometric/data/data.py in __getitem__(self, key)
     92     def __getitem__(self, key):
     93         r"""Gets …
Run Code Online (Sandbox Code Playgroud)

python python-3.x torch pytorch dataloader

2
推荐指数
1
解决办法
3521
查看次数

枚举数据加载器时出现 KeyError

我正在尝试遍历初始化如下的 pytorch 数据加载器:

trainDL = torch.utils.data.DataLoader(X_train,batch_size=BATCH_SIZE,shuffle=True,**kwargs)

其中 X_train 是一个像这样的熊猫数据框: 我的熊猫 DF

因此,我无法执行以下语句,因为我在“枚举”中收到 KeyError:

for batch_idx, (data, _) in enumerate(trainDL):
    {stuff}
Run Code Online (Sandbox Code Playgroud)

有没有人知道发生了什么?

编辑:

我得到的错误是:

KeyError                                  Traceback (most recent call last)
~/.local/share/virtualenvs/Pipenv-l_wD1rT4/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2896             try:
-> 2897                 return self._engine.get_loc(key)
   2898             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 40592

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-63-95142e0748bb> in <module>
----> 1 for batch_idx, (data, _) …
Run Code Online (Sandbox Code Playgroud)

python keyerror pytorch dataloader

1
推荐指数
1
解决办法
4275
查看次数

Pytorch DataLoader 迭代顺序稳定吗?

Pytorch Dataloader 的迭代顺序是否保证相同(在温和条件下)?

例如:

dataloader = DataLoader(my_dataset, batch_size=4,
                        shuffle=True, num_workers=4)
print("run 1")
for batch in dataloader:
  print(batch["index"])

print("run 2")
for batch in dataloader:
  print(batch["index"])

Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试对其进行测试,但它似乎没有修复,两次运行的顺序相同。有没有办法使订单相同?谢谢

编辑:我也试过做

unlabeled_sampler = data.sampler.SubsetRandomSampler(unlabeled_indices)
unlabeled_dataloader = data.DataLoader(train_dataset, 
                sampler=unlabeled_sampler, batch_size=args.batch_size, drop_last=False)
Run Code Online (Sandbox Code Playgroud)

然后遍历数据加载器两次,但结果是相同的不确定性。

iterable deterministic pytorch dataloader

1
推荐指数
1
解决办法
4048
查看次数