Pytorch中如何使用ImageFolder读取数据集时忽略特定文件
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍Pytorch中如何使用ImageFolder读取数据集时忽略特定文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、使用ImageFolder读取数据集时忽
千家信息网最后更新 2025年02月03日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
使用时,例如有mouse
、cat
、dog
三个类别的数据集文件夹,只想读取cat
和dog
,
代码如下:
dataset = FilterableImageFolder('./data', valid_classes=['cat', 'dog'])
以上是"Pytorch中如何使用ImageFolder读取数据集时忽略特定文件"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
文件
数据
函数
类别
代码
参数
方法
复杂
内容
文件夹
篇文章
规则
不同
操作系统
三个
不好
人工
价值
兴趣
分隔符
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全公开课观后感1000
个人服务器网站备案
软件开发流程 博客
寒假网络安全总结
职高网络技术是什么
服务器显示ip地址锁定
网络安全研究生考公务员
世界网络安全50强
图形中的数据库
泰安服务器公司全称叫什么
计算机网络技术发展现状
windows域服务器修改名称
直播公司服务器需要多大的宽带
金融科技中国互联网金融协会
我做出服务器
网络技术支撑职责
mir4传奇服务器维护中
苹果微信服务器延迟
塘沽区java软件开发
数据库怎么加列
删除服务器文件记录
e宝内部服务器错误怎么回事
服务器摆摊
电脑横机软件开发
数据库分片演示
郑州php软件开发
《网络安全法》普法计划
手游服务器引擎
网络安全高中主题班会
从事计算机网络技术的专家有