我已经阅读了__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调用.但它为什么这样做呢?
有人可以更详细地解释一下吗?
我目前正在尝试使用 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) 我正在尝试让 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)