Python Pytorch归一化二维张量
对于我的模型的更多robustnes,我想规范化我的特征张量 我试着按照我对图片的知识标准来做: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[:,:
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)