Python Pytorch归一化二维张量

Python Pytorch归一化二维张量,python,machine-learning,pytorch,Python,Machine Learning,Pytorch,对于我的模型的更多robustnes,我想规范化我的特征张量 我试着按照我对图片的知识标准来做: class Dataset(torch.utils.data.Dataset): 'Characterizes a dataset for PyTorch' def __init__(self, input_tensor, transform = transforms.Normalize(mean= 0.5, std=0.5)): self.labels = input_tensor[:,:

对于我的模型的更多robustnes,我想规范化我的特征张量

我试着按照我对图片的知识标准来做:

class Dataset(torch.utils.data.Dataset):
'Characterizes a dataset for PyTorch'
def __init__(self, input_tensor, transform = transforms.Normalize(mean= 0.5, std=0.5)):
    self.labels = input_tensor[:,:,-1]
    self.features = input_tensor[:,:,:-1]
    self.transform = transform

def __len__(self):
    return self.labels_planned.shape[0]

def __getitem__(self, index):

    # Load data and get label
    X = self.features[index]
    y = self.labelslabels[index]
    if self.transform:
        X = self.transform(X)   
    return X, y
但收到以下错误消息:

ValueError: Expected tensor to be a tensor image of size (C, H, W). Got tensor.size() = torch.Size([8, 25]).
无论我看到哪里,人们都建议使用.view生成三维,以符合图片的标准形状,但这对我来说似乎很奇怪。有没有更干净的方法。
还有,我应该把标准化放在哪里?仅针对批次或整个列车数据集?

您提出了两个不同的问题,我将尝试回答这两个问题

  • 事实上,您应该首先重塑为
    (c,h,w)
    ,其中
    c
    是通道维度。在大多数情况下,您将需要额外的维度,因为大多数“图像”层都是为接收三维维度张量而构建的,不包括批量维度,例如,等等。。。我不相信有任何方法可以绕过它,这样做会将您限制为一层图像数据集

    您可以使用或广播到所需形状:

    或者使用以下方法添加其他尺寸标注:

  • 关于规范化。批处理规范化和数据集规范化是两种不同的方法

    前者可以在卷积网络中提高性能。这种操作可以使用层实现,并使用可学习的参数完成:比例因子(~std)和偏差(~mean)。在调用模型时应用这种类型的规范化,并按批应用

    后者是一种预处理技术,允许使不同的特征具有相同的比例。这种规范化可以应用于每个元素的数据集内部。它要求您测量训练集的平均值和标准偏差


    • 你问了两个不同的问题,我将尝试回答这两个问题

      • 事实上,您应该首先重塑为
        (c,h,w)
        ,其中
        c
        是通道维度。在大多数情况下,您将需要额外的维度,因为大多数“图像”层都是为接收三维维度张量而构建的,不包括批量维度,例如,等等。。。我不相信有任何方法可以绕过它,这样做会将您限制为一层图像数据集

        您可以使用或广播到所需形状:

        或者使用以下方法添加其他尺寸标注:

      • 关于规范化。批处理规范化和数据集规范化是两种不同的方法

        前者可以在卷积网络中提高性能。这种操作可以使用层实现,并使用可学习的参数完成:比例因子(~std)和偏差(~mean)。在调用模型时应用这种类型的规范化,并按批应用

        后者是一种预处理技术,允许使不同的特征具有相同的比例。这种规范化可以应用于每个元素的数据集内部。它要求您测量训练集的平均值和标准偏差


      谢谢,看起来我想要的是第二种选择。我会这样做,我希望整个转换可以(也可能必须)在单位函数中完成。只需测量训练数据的平均值和标准偏差,使用这两个值初始化
      转换。规范化
      转换,然后像您那样在
      \uu getitem\uuuu
      中使用它。请记住向
      (c、h、w)
      广播!谢谢,看起来我想要的是第二种选择。我会这样做,我希望整个转换可以(也可能必须)在单位函数中完成。只需测量训练数据的平均值和标准偏差,使用这两个值初始化
      转换。规范化
      转换,然后像您那样在
      \uu getitem\uuuu
      中使用它。请记住向
      (c、h、w)
      广播!
      X = X.reshape(1, *X.shape)
      
      X.unsqueeze(0)