千家信息网

Pytorch中如何使用ImageFolder读取数据集时忽略特定文件

发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,这篇文章主要介绍Pytorch中如何使用ImageFolder读取数据集时忽略特定文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、使用ImageFolder读取数据集时忽
千家信息网最后更新 2025年11月18日Pytorch中如何使用ImageFolder读取数据集时忽略特定文件

这篇文章主要介绍Pytorch中如何使用ImageFolder读取数据集时忽略特定文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、使用ImageFolder读取数据集时忽略特定文件

如果事先知道需要忽略哪些文件,当然直接从数据集里删除就行了。但如果需要在程序运行时动态确认,或者筛选规则比较复杂,人工不好做,就需要让ImageFolder在读取时使用自定义的筛选规则。

ImageFolder有一个可选参数为is_valid_file,参数类型为可调用的函数,该函数传入一个str参数,返回一个bool值。当返回值为True时保留该文件,否则忽略。

例如,读取时想要忽略所有文件名带‘invalid’的文件,

代码如下:

import platformfrom torchvision.datasets import ImageFolderclass Check(object):    def __init__(self,                 key_word: str):        self.key_word = key_word        self.separator = '\\' if platform.system() == 'Windows' else '/'    def __call__(self,                  file_name: str) -> bool:        folders = file_name.split(self.separator)        return folders[-1].find(self.key_word) < 0dataset = ImageFolder('./data', is_valid_file=Check('invalid'))

这里定义了一个实现了__call__方法的Check类,相比于直接定义函数的好处在于可以在构造函数里指定想要忽略的字符,并且能够根据操作系统的不同把文件目录分隔符给确定了。

更加复杂的功能可以自行修改代码逻辑实现,但是要注意如果某个类别的所有文件都被筛选掉了,ImageFolder会报FileNotFoundError错误。

如果想要忽略整个类别可以使用下面方法!!!

二、ImageFolder只读取部分类别文件夹

直接继承并且重写ImageFolder类的find_classes方法即可

from torchvision.datasets.folder import *from typing import *class FilterableImageFolder(ImageFolder):    def __init__(            self,            root: str,            transform: Optional[Callable] = None,            target_transform: Optional[Callable] = None,            loader: Callable[[str], Any] = default_loader,            is_valid_file: Optional[Callable[[str], bool]] = None,            valid_classes: List = None    ):        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]        if not classes:            raise FileNotFoundError(f"Couldn't find any class folder in {directory}.")        class_to_idx = {cls_name: i for i, cls_name in enumerate(classes)}        return classes, class_to_idx

使用时,例如有mousecatdog三个类别的数据集文件夹,只想读取catdog

代码如下:

dataset = FilterableImageFolder('./data', valid_classes=['cat', 'dog'])

以上是"Pytorch中如何使用ImageFolder读取数据集时忽略特定文件"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

文件 数据 函数 类别 代码 参数 方法 复杂 内容 文件夹 篇文章 规则 不同 操作系统 三个 不好 人工 价值 兴趣 分隔符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 光谷服务器托管 创建一个流式套接字服务器 软件开发助理工程师干什么工作 电信dns服务器地址怎么设 深圳专业软件开发哪家可靠 数据库技术及应用实用指导 从化软件开发专业院校中专 一年级网络安全手抄报大全 更改数据库为什么不能保存 网易 对方服务器拒绝 赛诺服务器 软件开发公司员工日常工作视频 厦门网络技术总监年薪 系统数据库的特点包括什么 无法直接查看数据库是什么意思 图片要不要存在数据库 电信服务器管理技巧 大数据商务软件开发是干什么的 数据库中一门课程的属性都有什么 网络安全事件的新特点 高校网络安全小技能 MFCDLL连接不上数据库 与文件相比 数据库的特点 浙江正规软件开发服务价格优惠 二手服务器店铺推荐 大兴旧服务器回收报价单 上海的软件开发公司有哪些 饥荒服务器人物存档 诸暨市锐尘网络技术服务部 网络安全教育讲座大纲
0