pytorch读取自己的数据集,pytorch imagefolder
本文主要介绍Pytorch中使用ImageFolder在读取数据集时忽略特定文件,有参考价值。希望对你有帮助。
00-1010 1.使用ImageFolder 2读取数据集时忽略特定文件。ImageFolder只读取一些类别文件夹。
目录
如果事先知道哪些文件需要忽略,当然从数据集中删除即可。但如果需要在程序运行时动态确认,或者过滤规则比较复杂,难以手动完成,则需要让ImageFolder在读取时使用自定义过滤规则。
ImageFolder有一个可选参数is_valid_file,参数类型为可调用函数,传入一个str参数,返回一个bool值。当返回值为真时保留文件,否则忽略它。
例如,在读取时,您希望忽略文件名中包含“无效”的所有文件。
代码如下:
导入平台
从torchvision.datasets导入图像文件夹
类别检查(对象):
def __init__(self,
key_word: str):
self.key_word=关键字
self . separator= \ \ if platform . system()= Windows else /
def __call__(自我,
文件名:字符串)-布尔值:
folders=file_name.split(自身分隔符)
返回文件夹[-1]。查找(self.key_word) 0
dataset=ImageFolder(。/data ,is_valid_file=Check(invalid ))
这里定义了一个实现__call__方法的检查类。与直接定义函数相比,优点是可以在构造函数中指定想要忽略的字符,可以根据不同的操作系统确定文件目录分隔符。
更复杂的功能可以通过自行修改代码逻辑来实现,但需要注意的是,如果某个类别的所有文件都被过滤掉,ImageFolder会报告一个FileNotFoundError错误。
如果想忽略整个类别,可以用下面的方法!
一、使用ImageFolder读取数据集时忽略特定文件
直接继承和重写ImageFolder类的find_classes方法。
从torchvision.datasets.folder导入*
从输入导入*
类别FilterableImageFolder(image folder):
def __init__(
自我,
root: str,
transform:可选[可调用]=无,
target_transform:可选[可调用]=无,
loader: Callable[[str],Any]=default_loader,
is_valid_file:可选[Callable[[str],bool]]=None,
valid_classes: List=无
):
self.valid _ classes=valid _ classes
super(FilterableImageFolder,self)。__init__(root,transform,target_transform,loader,is_valid_file)
def find_classes(self,directory : str)-Tuple[List[str],Dict[str,int]]:
classes=sorted(entry . name for entry in OS . scandir(directory)if entry . is _ dir())
#添加以下句子
classes=[valid _ class for valid _ class in classes if valid _ class in self . valid _ classes]
如果不是类别:
引发FileNotFoundError(f 在{directory}中找不到任何类文件夹。)
class _ to _ idx={ cls _ name : I for I,cls_name in enumerate(classes)}
返回类,class_to_idx
比如在使用时,数据集文件夹有三大类,鼠标,猫和狗,而只想读取猫和狗,
代码如下:
dataset=FilterableImageFolder(。/data ,valid_classes=[cat , dog])
关于Pytorch中用ImageFolder读取数据集时忽略特定文件的这篇文章到此为止。关于使用ImageFolder读取数据集的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。