Python PyTorch数据集类的子类找不到数据集文件
我试图创建PyTorch MNIST dataset类的一个子类,我称之为Python PyTorch数据集类的子类找不到数据集文件,python,python-3.x,constructor,pytorch,subclass,Python,Python 3.x,Constructor,Pytorch,Subclass,我试图创建PyTorch MNIST dataset类的一个子类,我称之为CustomMNISTDataset,如下所示: import torchvision.datasets as datasets class CustomMNISTDataset(datasets.MNIST): def __init__(self, root='/home/psando'): super().__init__(root=root,
CustomMNISTDataset
,如下所示:
import torchvision.datasets as datasets
class CustomMNISTDataset(datasets.MNIST):
def __init__(self, root='/home/psando'):
super().__init__(root=root,
download=False)
但当我执行时:
dataset = CustomMNISTDataset()
它失败,错误为:“RuntimeError:找不到数据集。您可以使用download=True下载它”
但是,当我在同一个文件中运行以下命令时:
dataset = datasets.MNIST(root='/home/psando', download=False)
print(len(dataset))
它成功并按预期打印“60000”
既然CustomMNISTDataset
子类datasets.MNIST
为什么行为不同?我已验证路径“/home/psando”包含MNIST目录以及原始和已处理的子目录(否则,显式调用datasets.MNIST()的构造函数将失败)。当前行为意味着调用CustomMNISTDataset
中的super()。\uuuu init\uuu()
没有调用dataset.MNIST的构造函数,这很奇怪
其他详细信息:我正在使用Python 3.6.8和torch==1.6.0
,torchtools==0.0.2
,以及
torchvision==0.7.0
。任何帮助都将不胜感激 这需要一些源代码潜水,但您的问题是函数。数据集的路径取决于类的名称,因此当您子类MNIST
时,根文件夹将更改为/home/psando/CustomMNISTDataset
因此,如果您将/home/psando/MNIST
重命名为/home/psando/CustomMNISTDataset
,它会起作用。您是否尝试过download='True'
?根据文档,download
应该是bool,而不是字符串。但是,让我在customnListDataSet
中设置download=True
,看看它将下载的文件放在哪里……我明白了!是的,我刚才在CustomMNISTDataset
中更改了download=True
,我注意到它正在下载到/home/psando/CustomMNISTDataset
。我的印象是,它总是在根目录中寻找作为参数传递的MNIST/
目录。感谢您链接源代码中的相关行!那么,是否不鼓励以这种方式对dataset类进行子类化呢?其实不是这样,这只是意味着root
参数并不是您所期望的那样。只要记住命名,就不会得到一堆数据集的副本:)