Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyTorch数据集类的子类找不到数据集文件_Python_Python 3.x_Constructor_Pytorch_Subclass - Fatal编程技术网

Python PyTorch数据集类的子类找不到数据集文件

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,

我试图创建PyTorch MNIST dataset类的一个子类,我称之为
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
参数并不是您所期望的那样。只要记住命名,就不会得到一堆数据集的副本:)