#python #machine-learning #pytorch
Вопрос:
я использую pytorch для решения своей работы по прогнозированию. Но я не знаю, как и где нормализовать данные с помощью формы (N, 1500, 4). Другими словами, есть данные, которые содержат N строк, и форма каждой строки равна 1500 x 4.
Вот мой фрагмент кода
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]]]
Ответ №1:
В своем коде вы можете включить это transforms.Normalize(mean, std)
в train_dataset = MyDataset(transform=toTensor)
, включив несколько преобразований.
train_dataset = MyDataset(
transform=transforms.Compose([
transforms.ToTensor()
, transforms.Normalize(mean, std)
])
Вы должны предварительно вычислить mean
и std
, что можно сделать, загрузив данные с помощью a dataloader
, а затем вычислить их, повторяя их. (Или, если это хорошо известный набор данных или набор данных, чей mean
и std
упоминается в какой-либо исследовательской работе, вы можете просто использовать его).