脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Pytorch中使用ImageFolder读取数据集时忽略特定文件

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

2022-11-12 10:57SDFDSJFJ Python

这篇文章主要介绍了Pytorch中使用ImageFolder读取数据集时忽略特定文件,具有一的参考价值需要的小伙伴可以参考一下,希望对你有所帮助

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

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

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

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

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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方法即可

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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

代码如下:

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

到此这篇关于Pytorch中使用ImageFolder读取数据集时忽略特定文件的文章就介绍到这了,更多相关ImageFolder读取数据集内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_44980390/article/details/123439341

延伸 · 阅读

精彩推荐
  • Python解决keras.datasets 在loaddata时,无法下载的问题

    解决keras.datasets 在loaddata时,无法下载的问题

    这篇文章主要介绍了解决keras.datasets 在loaddata时,无法下载的问题,具有很好的参考价值,希望对大家有所帮助。...

    半闲居士吃螃蟹12032021-11-07
  • Pythonpython3+PyQt5+Qt Designer实现扩展对话框

    python3+PyQt5+Qt Designer实现扩展对话框

    这篇文章主要为大家详细介绍了python3+PyQt5+Qt Designer实现扩展对话框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    basisworker8882021-02-03
  • Pythonpython中的格式化输出用法总结

    python中的格式化输出用法总结

    这篇文章主要介绍了python中的格式化输出用法,分析了Python格式化输出的种类并结合实例形式总结了针对浮点数的格式化输出方法,需要的朋友可以参考下...

    feelang11732020-09-03
  • Pythonpython对日志进行处理的实例代码

    python对日志进行处理的实例代码

    本篇文章给大家分享了关于python处理日志的方法以及相关实例代码,有兴趣的朋友们学习下。...

    Python教程网6952021-04-05
  • PythonPython爬虫进阶之Beautiful Soup库详解

    Python爬虫进阶之Beautiful Soup库详解

    这篇文章主要介绍了Python爬虫进阶之Beautiful Soup库详解,文中有非常详细的代码示例,对正在学习python爬虫的小伙伴们有非常好的帮助,需要的朋友可以参考下...

    ZSYL8732021-10-22
  • Pythonpython实现ping命令小程序

    python实现ping命令小程序

    这篇文章主要介绍了python实现ping命令小程序的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...

    月为暮5882021-08-19
  • Python详解python编程slice与indices函数用法示例

    详解python编程slice与indices函数用法示例

    这篇文章主要介绍了详解python编程中slice与indices使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    沉沉沉小姐12132022-01-13
  • Pythonpython继承和抽象类的实现方法

    python继承和抽象类的实现方法

    这篇文章主要介绍了python继承和抽象类的实现方法,实例分析了Python针对类的继承及抽象类的定义及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    脚本之家6502020-05-19