相关疑难解决方法(0)

了解__getitem__方法

我已经阅读了__getitem__Python文档中的大部分文档以及stackoverflow,因此这不是一个重复的问题.但我仍然无法理解它的含义.

所以我能理解的__getitem__是用于实现类似的调用self[key].但它的用途是什么?

假设我有一个以这种方式定义的python类:

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __getitem__(self,key):
        print ("Inside `__getitem__` method!")
        return getattr(self,key)

p = Person("Subhayan",32)
print (p["age"])
Run Code Online (Sandbox Code Playgroud)

这会按预期返回结果.但为什么要__getitem__首先使用?我也听说过__getitem__内部的Python调用.但它为什么这样做呢?

有人可以更详细地解释一下吗?

python

86
推荐指数
3
解决办法
7万
查看次数

__getitem__ 的 idx 在 PyTorch 的 DataLoader 中如何工作?

我目前正在尝试使用 PyTorch 的 DataLoader 处理数据以输入我的深度学习模型,但遇到了一些困难。

我需要的数据是 shape (minibatch_size=32, rows=100, columns=41)。该__getitem__COAD,我有自定义的内Dataset类,我写了看起来是这样的:

def __getitem__(self, idx):
    x = np.array(self.train.iloc[idx:100, :])
    return x
Run Code Online (Sandbox Code Playgroud)

我这样写的原因是因为我希望 DataLoader 一次处理形状的输入实例(100, 41),而我们有 32 个这样的单个实例。

但是,我注意到与我最初的看法相反,idxDataLoader 传递给函数的参数不是顺序的(这很重要,因为我的数据是时间序列数据)。例如,打印值给了我这样的东西:

idx = 206000
idx = 113814
idx = 80597
idx = 3836
idx = 156187
idx = 54990
idx = 8694
idx = 190555
idx = 84418
idx = 161773
idx = 177725
idx = 178351
idx = 89217
idx = 11048
idx = …
Run Code Online (Sandbox Code Playgroud)

python pytorch dataloader

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

PyTorch 数据集应该返回什么?

我正在尝试让 PyTorch 与 DataLoader 一起使用,据说这是处理小批量的最简单方法,在某些情况下这是获得最佳性能所必需的。

DataLoader 想要一个数据集作为输入。

大多数关于数据集的文档都假设您正在使用现成的标准数据集(例如 MNIST),或者至少使用图像,并且可以使用现有的机器作为黑匣子。我正在处理自己生成的非图像数据。我当前最好的尝试是,将有关如何执行此操作的文档提炼为最小的测试用例:

import torch
from torch import nn
from torch.utils.data import Dataset, DataLoader


class Dataset1(Dataset):
    def __init__(self):
        pass

    def __len__(self):
        return 80

    def __getitem__(self, i):
        # actual data is blank, just to test the mechanics of Dataset
        return [0.0, 0.0, 0.0], 1.0


train_dataloader = DataLoader(Dataset1(), batch_size=8)

for X, y in train_dataloader:
    print(f"X: {X}")
    print(f"y: {y.shape} {y.dtype} {y}")
    break


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.layers = nn.Sequential(
            nn.Linear(3, 10),
            nn.ReLU(),
            nn.Linear(10, 1),
            nn.Sigmoid(), …
Run Code Online (Sandbox Code Playgroud)

pytorch pytorch-dataloader

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

标签 统计

python ×2

pytorch ×2

dataloader ×1

pytorch-dataloader ×1