Pytorch中使用ImageFolder读取数据集时忽略特定文件
作者:SDFDSJFJ 发布时间:2021-08-09 01:18:24
标签:Pytorch,ImageFolder,读取,数据集,忽略,特定,文件
一、使用ImageFolder读取数据集时忽略特定文件
如果事先知道需要忽略哪些文件,当然直接从数据集里删除就行了。但如果需要在程序运行时动态确认,或者筛选规则比较复杂,人工不好做,就需要让ImageFolder
在读取时使用自定义的筛选规则。
ImageFolder有一个可选参数为is_valid_file
,参数类型为可调用的函数,该函数传入一个str参数,返回一个bool值。当返回值为True时保留该文件,否则忽略。
例如,读取时想要忽略所有文件名带‘invalid’的文件,
代码如下:
import platform
from torchvision.datasets import ImageFolder
class 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) < 0
dataset = 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
使用时,例如有mouse
、cat
、dog
三个类别的数据集文件夹,只想读取cat
和dog
,
代码如下:
dataset = FilterableImageFolder('./data', valid_classes=['cat', 'dog'])
来源:https://blog.csdn.net/qq_44980390/article/details/123439341


猜你喜欢
- 普通爬虫正常流程:数据来源分析发送请求获取数据解析数据保存数据环境介绍python 3.8pycharm 2021专业版【付费VIP完整版】
- 前言这篇文章主要介绍了使用Python画了一棵圣诞树的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价
- 假设mysql安装在c:盘,mysql数据库的用户名是root,密码是123456,数据库名是database_name,在d:盘根目录下面
- 1从SQLServer导出数据 执行BCP: bcp "..." queryout "F:\test.txt&
- 今天晚上,笔者接到客户的一个需要,那就是:对多分类结果的每个类别进行指标评价,也就是需要输出每个类型的精确率(precision),召回率(
- Python标准库的OS模块对操作系统的API进行了封装,并且使用统一的API访问不同操作系统的相同功能。OS模块包含与操作系统的系统环境、
- 本文实例讲述了Python实现的寻找前5个默尼森数算法。分享给大家供大家参考,具体如下:找前5个默尼森数。若P是素数且M也是素数,并且满足等
- 我们公司网站的项目都是采用utf-8编码格式的,一天,发现部分电脑打开网站的一个页面是空白页,要在IE下重新选择编码才显示正常。我们网站的编
- 在ASP.NET中,使用C#连接SQL数据库,并使用SQL语句查询,以前从来没有接触过C#,最近用到了,摸索了两天终于运行起来了,Mark一
- 前言在java中,反斜杠“\”转义是“\”,因此表示一个“\”要使用“\\”,如果是正则表达式,那么表示一个“\”需要用“\\\\”,在my
- 中文如果用表单提交的话,不会出现乱码,而用ajax提交就会出现乱码,这是什么原因呢?我的理解是,我在写源码的时候,一般用记事本写,保存的时候
- python新手一枚,操作系统Win10 64 bit,Python版本,3.7因为某个脚本需要用到win32con 和win32api模块
- JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据。说白了就是能
- 对于简单的网络例如全连接层Linear可以使用以下方法打印linear层:fc = nn.Linear(3, 5)params = list
- 我们现在使用的验证手段都是以验证码为主,让用户根据图片输入验证字符,这种方法的安全度尚可,但会给用户带来一些不便和困扰,比如这个雅虎的验证码
- 数据可视化是一种将庞杂抽象的数据转化为直观易懂的图形的数据呈现技术,它能帮助我们快速把握数据的分布和规律,更加轻松地理解和探索信息。在当今这
- 下载并选择MySQL的安装包由于MySQL一直在升级,所以当您阅读本文时,或许在其官方网站上已提供了新的正式版供你下载,因此,以下提供的链接
- 前言在数据分析领域,最热门的莫过于Python和R语言,本文将详细给大家介绍关于Python利用pandas查询数据的相关内容,分享出来供大
- 我就废话不多说了,大家还是直接看代码吧~import tensorflow as tffrom sklearn.metrics import
- 环境介绍python3.8numpymatplotlib第一步,绘制一个三维的爱心关于这一步,我采用的是大佬博客中的最后一种绘制方法。当然,