【问题标题】:Where is the correct position in order to normalize the data?为了规范化数据,正确的位置在哪里?
【发布时间】:2021-09-16 02:28:54
【问题描述】:

我使用 pytorch 来解决我的预测工作。 但我不知道如何以及在何处使用形状(N、1500、4)规范化数据。 换句话说,有N行的数据,每行的形状是1500 x 4。

这是我的代码 sn-p

class MyDataset(Data.Dataset):
  def __init__(self, transform=None): 
    # get the training data
    dataSource=[['xxxxxx'],
                ['xxxxxx'],
                ['xxxxxx']]
    conn=pymssql.connect(
    host='XXXXXXX',
    user='XXXX',
    password='XXXXXXXX',
    database='XXXXXXXX'
    )
    featureDatas=[]
    for data in dataSource:
        oneDatas=[]
        cursor=conn.cursor(as_dict=True)
        sql='xxxxxxxxxxx'
        cursor.execute(sql)
        maxCount=1500
        iCount=0
        for row in cursor:
            if iCount<maxCount:
                oneDatas.append([row['Temp'],row['Pre'],row['Rev'],row['Ph']])
            else:
                break
            iCount+=1
        featureDatas.append(np.array(oneDatas).astype("float32"))    
    cursor.close()
    conn.close()

    self.features= featureDatas
    
    labelDatas=[10,11,12]
    self.labels = np.array(labelDatas).astype("float32").reshape(3,1) 
    self.transform = transform 

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

  def __getitem__(self, idx):
    if torch.is_tensor(idx): 
      idx = idx.tolist()

    X = self.features[idx] 
    Y = self.labels[idx]

    if self.transform:
      X = self.transform(X)
      Y = self.transform(Y)

    return X,Y

def toTensor(x):
  return torch.tensor(x)

train_dataset = MyDataset(transform=toTensor)

数据是这样的

[[[5.0084e+04, 2.0330e+03, 0.0000e+00, 3.5250e+03],
         [3.0613e+04, 5.0000e+00, 4.6720e+03, 7.8130e+03],
         [3.0613e+04, 3.5000e+01, 5.2418e+04, 7.9840e+03],
         ...,
         [3.6498e+04, 7.7700e+02, 8.8623e+04, 6.7800e+03],
         [3.6498e+04, 6.9700e+02, 8.8615e+04, 6.7800e+03],
         [3.6498e+04, 6.4600e+02, 8.8597e+04, 6.7800e+03]],

        [[2.9173e+04, 6.0000e+00, 7.0000e+01, 6.7620e+03],
         [2.9236e+04, 2.0000e+00, 5.3000e+01, 6.8850e+03],
         [2.9299e+04, 1.4000e+01, 7.0000e+01, 7.8090e+03],
         ...,
         [3.7500e+04, 6.8400e+02, 7.4862e+04, 6.8240e+03],
         [3.7625e+04, 6.3400e+02, 7.4755e+04, 6.8370e+03],
         [3.7625e+04, 5.0700e+02, 7.4764e+04, 6.8280e+03]],

        [[2.5605e+04, 1.1000e+01, 8.8597e+04, 6.9990e+03],
         [2.6763e+04, 2.0000e+00, 8.8597e+04, 6.9940e+03],
         [2.8140e+04, 4.2000e+01, 8.8606e+04, 6.9940e+03],
         ...,
         [1.8969e+04, 6.8200e+02, 8.8553e+04, 6.9940e+03],
         [1.8969e+04, 6.5700e+02, 8.8553e+04, 6.9940e+03],
         [1.8969e+04, 6.0600e+02, 8.8535e+04, 6.9990e+03]]]

【问题讨论】:

    标签: python machine-learning pytorch


    【解决方案1】:

    在您的代码中,您可以将其与 transforms.Normalize(mean, std) 合并到 train_dataset = MyDataset(transform=toTensor) 通过合并多个转换。

    train_dataset = MyDataset(
        transform=transforms.Compose([
              transforms.ToTensor()
            , transforms.Normalize(mean, std)
        ])
    

    您必须预先计算meanstd,这可以通过使用dataloader 加载数据然后通过迭代它们来计算它来完成。 (或者如果它是一个众所周知的数据集,或者在一些研究论文中提到了meanstd 的数据集,你可以简单地使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 2019-11-02
      • 2011-04-26
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多