【发布时间】:2021-07-29 21:49:53
【问题描述】:
我想使用NumPy 制作一个数据集,然后想训练和测试一个简单的模型,例如“线性或逻辑”。
我正在努力学习Pytorch Lightning。我找到了一个tutorial,我们可以使用 NumPy 数据集并且可以使用均匀分布here。作为一个新人,我没有完全理解,我该怎么做!
我的代码如下
import numpy as np
import pytorch_lightning as pl
from torch.utils.data import random_split, DataLoader, TensorDataset
import torch
from torch.autograd import Variable
from torchvision import transforms
np.random.seed(42)
device = 'cuda' if torch.cuda.is_available() else 'cpu'
class DataModuleClass(pl.LightningDataModule):
def __init__(self):
super().__init__()
self.constant = 2
self.batch_size = 10
self.transform = transforms.Compose([
transforms.ToTensor()
])
def prepare_data(self):
a = np.random.uniform(0, 500, 500)
b = np.random.normal(0, self.constant, len(x))
c = a + b
X = np.transpose(np.array([a, b]))
idx = np.arange(500)
np.random.shuffle(idx)
# Uses foirst 400 random indices for training
train_idx = idx[:400]
# Uses the remaining indices for validation
val_idx = idx[400:]
# Generate train and validation dataset
x_train, y_train = X[train_idx], y[train_idx]
x_val, y_val = X[val_idx], y[val_idx]
# Converting numpy array to Tensor
self.x_train_tensor = torch.from_numpy(x_train).float().to(device)
self.y_train_tensor = torch.from_numpy(y_train).float().to(device)
self.x_val_tensor = torch.from_numpy(x_val).float().to(device)
self.y_val_tensor = torch.from_numpy(y_val).float().to(device)
training_dataset = TensorDataset(self.x_train_tensor, self.y_train_tensor)
validation_dataset = TensorDataset(self.x_val_tensor, self.y_val_tensor)
return training_dataset, validation_dataset
def train_dataloader(self):
training_dataloader = prepare_data() # Most probably this is wrong way!!!
return DataLoader(self.training_dataloader)
def val_dataloader(self):
validation_dataloader = prepare_data() # Most probably this is wrong way!!!
return DataLoader(self.validation_dataloader)
# def test_dataloader(self):
obj = DataModuleClass()
print(obj.prepare_data())
这部分是根据给出的答案完成的[这里,我想把a and b as features和c当作label or target variable。]
现在,如何将数据集传递给`训练和验证方法?
【问题讨论】:
-
我认为你没有创建类的实例,最后写:obj = DataModuleClass(),然后调用 obj.prepare_data()
-
谢谢它有效。现在,如果我想使用
a, and b作为特征,那么我怎么能告诉飞蛾这两个是特征而c是目标? -
对不起,我没听明白,你能解释一下你想用这 3 个变量 a、b、c 执行什么功能
-
我想用
a and b作为训练模型的特征,c作为目标变量。我还将a, and b转换为张量。现在,我必须将它们结合起来吗?因为,我们可以传递 2 个变量,例如SklearnDataModule(X, y),其中,X是所有特征变量,y是目标。 -
请看,pytorch 中的训练适用于张量,而在上面的数据中,numpy 数组正在创建,所以我建议您阅读 pytorch 培训指南,它可以帮助您学习 pytorch 的基础知识和它的工作,你可以看到这个:towardsdatascience.com/…
标签: numpy machine-learning pytorch-lightning