Python 将3D张量分批(Pytork)

Python 将3D张量分批(Pytork),python,neural-network,pytorch,Python,Neural Network,Pytorch,我有一个形状为(50,50,2)的张量。用(x,y)中的网格值填充的。像这样 r =0.5 #Sample 3D space min = -10 max = 10 complexnum = 50j #Sample 3D space X,Y = np.mgrid[min:max:complexnum,min:max:complexnum,] * r T = np.sin(3*X) * np.sin(3*Y) XY = np.concatenate((X.reshape((X.shape[

我有一个形状为(50,50,2)的张量。用(x,y)中的网格值填充的。像这样

r =0.5
#Sample 3D space
min = -10
max = 10
complexnum = 50j

#Sample 3D space
X,Y  = np.mgrid[min:max:complexnum,min:max:complexnum,] * r

T = np.sin(3*X) * np.sin(3*Y)


XY = np.concatenate((X.reshape((X.shape[0],X.shape[0],1)),Y.reshape((X.shape[0],X.shape[0],1))),2)
XY = torch.from_numpy(XY.astype(np.float32)).to(device)
T = T.reshape((T.shape[0],T.shape[0],1))
T = torch.from_numpy(T.astype(np.float32)).to(device)
我创建了一个神经网络,可以将XY作为输入,T作为输出。这就是创建一个函数f(x,y)。现在,我需要创建一种使用批处理来训练NN的方法。样品总量应为2500=50 x 50。我想把XY和T张量分成几批。我尝试了DataLoader并创建了一个数据集类,但运气不好。有什么办法可以做到这一点吗?我的张量形状正确吗

对于某些上下文,这是我创建的用于提供给DataLoader的自定义数据集:

class CustomTrainDataset(Dataset):
def __init__(self, x_tensor, y_tensor):
    self.xdomain = x_tensor
    self.ydomain = y_tensor
    
def __getitem__(self, index):
    
  # I flatten them to find the ith sample  
  augxy = torch.from_numpy(np.vstack([self.xdomain[:,:,0].cpu().numpy().ravel(), self.xdomain[:,:,1].cpu().numpy().ravel()]).transpose().astype(np.float32)).to(device)

    
   augw= torch.from_numpy(np.vstack([self.ydomain.cpu().detach().numpy().ravel()]).transpose().astype(np.float32)).to(device)
    xy =  augxy[index]

    l = torch.where((self.xdomain[:,:,0] == xy[0]) )
    m = torch.where((self.xdomain[:,:,1]== xy[1]))
    
    xindex = m[0][0]
    yindex = l[1][0]
   
    
    return (self.xdomain[index],self.ydomain[index])
    

def __len__(self):
    return len(self.xdomain) * len(self.xdomain) 
我知道我得换衣服了。我想,通过将a([1,2],[1,1])作为第I个样本,将50x50作为总长度,我会得到一个很好的批次。但相反,它给了我一个大小为(2500,2)的数组,并将其分为若干批


很抱歉提出这个非常基本的问题,我一直在努力解决更高维度的问题。

您能告诉我们您在使用数据集和数据加载器时做了哪些尝试吗?粘贴代码,解释你打算用它做什么,以及你使用的拦截器faced@trialNerror2天前我写了,但没有人回复,这就是我为什么写这个小帖子的原因。我会在这里做的。这是我最初的帖子:好吧,还有一些事情我仍然不明白,你能给我们一个你的网络的简化版本,并明确它作为输入的格式是什么吗?它是[B,50,50,2]还是[B,2500,2],还是[B,2](B是批次大小),以及在成功进行批次处理后,您希望能够输入的张量形状是什么?因为我觉得你们已经把2500个标量(1-d)作为一个2500-d张量,这在概念上是完全不同的。好吧,也许这就是我错过的概念。所以我有(x,y)对,我把它们聚合成一个网格结构(50,50,2),这意味着我有2500个(x,y)对的样本。这就是整个数据集,所以我想把它分解成巴赫的大小,例如(12,12,2)和(12,12,1)。