我有以下问题。我正在为我的 pytorch 数据加载器定义一个数据集类。在课堂上,我想在__getitem__
方法中使用外部定义的函数。
这是我的意思的例子
import torch
from torch.utils.data import Dataset, DataLoader
import pandas as pd
def readOneElement(df, idx):
# some fancy code which returns one element with index i based on full data set df (pandas)
...
# And here the Dataset class
class ModelDataset(Dataset):
def __init__(self, dataPath, transform = None):
def listUniqueExamples(self, df):
listExamples = df[['criterionId', 'adGroupId', 'campaignId', 'accountId']].drop_duplicates().reset_index();
return listExamples
self.transform = transform
# Load data
df = pd.read_csv(dataPath + '/trainData.csv')
# Transform constants to self
self.df = df
self.listExamples = listUniqueExamples(self, self.df)
self.length = len(self.listExamples)
def __len__(self):
return self.length
def __getitem__(self, idx):
# Create one example data
sample = readOneElement(df = self.df, idx = idx) # !!!
return sample
标有#的行!!!将不起作用,因为该函数是在此 Dataset 对象之外定义的。我收到以下错误
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
in
----> 1 data[20]
in __getitem__(self, idx)
31 def __getitem__(self, idx):
32 # Create one example data
---> 33 sample = readOneElement(df = self.df, idx = idx)
NameError: name 'readOneElement' is not defined
如果我在 Dataset 对象中定义了这个函数(就像我为listUniqueExamples
函数所做的那样),那么它就会起作用。但是,在这种确切的情况下,我希望这个函数是外部的。
有什么方法可以将外部函数导入pytorch中的Dataset类?
先感谢您!