带有DataLoader和3D输入的小批量。(小火炬)

2024-10-02 06:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在努力为3D张量管理和创建批次。我以前使用过它来为1D tensor创建批处理。然而,在我目前的研究中,我需要用形状张量(10241024,2)创建批次

我创建了自定义数据,用作pytorch中DataLoader方法的输入。我为1D阵列创建了以下内容:

class CustomDataset(Dataset):
def __init__(self, x_tensor, y_tensor):
    self.xdomain = x_tensor
    self.ydomain = y_tensor
    
def __getitem__(self, index):
    return (self.xdomain[index], self.ydomain[index])

def __len__(self):
    return len(self.xdomain)

它工作得很好,但是,我意识到这分别不适用于形状为(10241024,2)和(10241024,1)的张量x_张量和y_张量。我知道我必须改变_uuuGetItem uuuuuuu和_uuuulen uuuuuuuu函数,这样它就可以将张量分成几批

我尝试了很多方法,但我知道它可以奏效的一个方法是,我可以将这些张量展平成(1024x1024,2)和(1024x1024,1)两种形状。然而,我将不得不不仅改变我的NN定义,而且必须改变我的代码

所以我想保持原样,尽可能理解如何创建这些函数。我对这些功能的理解是: __len__以便len(dataset)返回数据集的大小。 __getitem__以支持索引,从而可以使用数据集[i]获取第i个样本

有了这些知识,我创建了这个类,它可以找到前两个维度的索引(找到第I个样本)。但是,这将NN的输入创建为(1024x1024,2)和输出(1024x1024,1)。我希望它是(10241024,2)和(10241024,1)

如果有人对数据加载器和小批量有更好的理解,可以解释我遗漏了什么,那将是令人惊讶的。首先,这可能吗

谢谢你阅读,如果这个问题太基本,我很抱歉。我希望这是清楚的


Tags: 数据方法函数selfindexlenreturndef

热门问题