0

我有以下问题。我正在为我的 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类?

先感谢您!

4

0 回答 0