如何解决如何在 PyTorch Lightning 中从 prepare_data() 获取数据集到 setup()
我使用 PyTorch Lightning 的 NumPy
方法在 prepare_data()
方法中使用 DataModules
创建了自己的数据集。现在,我想将数据传递给 setup()
方法以拆分为训练和验证。
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
def prepare_data(self):
a = np.random.uniform(0,500,500)
b = np.random.normal(0,self.constant,len(a))
c = a + b
X = np.transpose(np.array([a,b]))
# Converting numpy array to Tensor
self.x_train_tensor = torch.from_numpy(X).float().to(device)
self.y_train_tensor = torch.from_numpy(c).float().to(device)
training_dataset = TensorDataset(self.x_train_tensor,self.y_train_tensor)
return training_dataset
def setup(self):
data = # What I have to write to get the data from prepare_data()
self.train_data,self.val_data = random_split(data,[400,100])
def train_dataloader(self):
training_dataloader = setup() # Need to get the training data
return DataLoader(self.training_dataloader)
def val_dataloader(self):
validation_dataloader = prepare_data() # Need to get the validation data
return DataLoader(self.validation_dataloader)
obj = DataModuleClass()
print(obj.prepare_data())
解决方法
与您之前的问题相同的答案...
def prepare_data(self):
a = np.random.uniform(0,500,500)
b = np.random.normal(0,self.constant,len(a))
c = a + b
X = np.transpose(np.array([a,b]))
# Converting numpy array to Tensor
self.x_train_tensor = torch.from_numpy(X).float().to(device)
self.y_train_tensor = torch.from_numpy(c).float().to(device)
training_dataset = TensorDataset(self.x_train_tensor,self.y_train_tensor)
self.training_dataset = training_dataset
def setup(self):
data = self.training_dataset
self.train_data,self.val_data = random_split(data,[400,100])
def train_dataloader(self):
return DataLoader(self.train_data)
def val_dataloader(self):
return DataLoader(self.val_data)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。