Pytorch学习第二天_菜鸡小吴需要努力的博客-程序员秘密

技术标签: Pytorch学习  

1.Dataloader与Dataset

根据自己的数据创建自己的Dataset,例如:

class RMBDataset(Dataset):
    def __init__(self, data_dir, transform=None):
        """
        rmb面额分类任务的Dataset
        :param data_dir: str, 数据集所在路径
        :param transform: torch.transform,数据预处理
        """
        self.label_name = {
    "1": 0, "100": 1}
        self.data_info = self.get_img_info(data_dir)  # data_info存储所有图片路径和标签,在DataLoader中通过index读取样本
        self.transform = transform

    def __getitem__(self, index):
        path_img, label = self.data_info[index]
        img = Image.open(path_img).convert('RGB')     # 0~255

        if self.transform is not None:
            img = self.transform(img)   # 在这里做transform,转为tensor等等

        return img, label

    def __len__(self):
        return len(self.data_info)

    @staticmethod #静态设置,可以不实例化 直接调用
    def get_img_info(data_dir):
        data_info = list()
        for root, dirs, _ in os.walk(data_dir):
            # 遍历类别
            for sub_dir in dirs:
                img_names = os.listdir(os.path.join(root, sub_dir))
                img_names = list(filter(lambda x: x.endswith('.jpg'), img_names))

                # 遍历图片
                for i in range(len(img_names)):
                    img_name = img_names[i]
                    path_img = os.path.join(root, sub_dir, img_name)
                    label = rmb_label[sub_dir]
                    data_info.append((path_img, int(label)))

        return data_info

2.transform–数据增强

裁剪,旋转,对比度,亮度,填充等等

transforms.CenterCrop() #中心旋转
transforms.RandomCrop(size, padding=None, pad_if_needed=False, 
fill=0, padding_mode='constant')  #随机裁剪
transforms.RandomRotation(degrees, resample=False, expand=False, 
center=None)  #旋转
transforms.ColorJitter(brightness=0, contrast=0, saturation=0, 
hue=0)  #调整亮度、对比度、饱和度和色相
transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, 
resample=False, fillcolor=0)  #仿射变换

3.自定义transforms

class AddPepperNoise(object):
    """增加椒盐噪声
    Args:
        snr (float): Signal Noise Rate
        p (float): 概率值,依概率执行该操作
    """

    def __init__(self, snr, p=0.9):
        assert isinstance(snr, float) or (isinstance(p, float))
        self.snr = snr
        self.p = p

    def __call__(self, img):
        """
        Args:
            img (PIL Image): PIL Image
        Returns:
            PIL Image: PIL image.
        """
        if random.uniform(0, 1) < self.p:
            img_ = np.array(img).copy()
            h, w, c = img_.shape
            signal_pct = self.snr
            noise_pct = (1 - self.snr)
            mask = np.random.choice((0, 1, 2), size=(h, w, 1), p=[signal_pct, noise_pct/2., noise_pct/2.])
            mask = np.repeat(mask, c, axis=2)
            img_[mask == 1] = 255   # 盐噪声
            img_[mask == 2] = 0     # 椒噪声
            return Image.fromarray(img_.astype('uint8')).convert('RGB')
        else:
            return img
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wrw971018/article/details/107132061

智能推荐

Android Studio XML文件中没有自动提示和自动补全功能解决办法_as 自动提示失效_hgyixf的博客-程序员秘密

不知道是不是升级到AndroidX 还是电脑配置的问题,昨天还是好好的有代码提示功能,今天早上一打开AS ,竟然没有代码提示了。一番百度后发现网上的方法有以下几种:1、去掉file--Power Save Mode,这是AndroidStudio的省电模式,打钩选择之后确实没有任何提示的。可是我的AS 没有打勾啊,确定这不能解决我的问题,有网友反映,能解决他们的问题。2、有人说...

随机森林r语言实现(超详细)_随机森林r代码_data大柳的博客-程序员秘密

随机森林就是用随机的方式建立一个森林,森林里面有很多的决策树,并且每棵树之间是没有关联的。得到一个森林后,当有一个新的样本输入,森林中的每一棵决策树会分别进行一下判断,进行类别归类(针对分类算法),最后比较一下被判定哪一类最多,就预测该样本为哪一类。 随机森林算法有两个主要环节:决策树的生长和投票过程。随机森林有什么优缺点。R语言如何实现。

个人开发者做一款Android App,android如何开发一款赚钱app_开发者app_andorid开发者的博客-程序员秘密

在大学时, 自己是学计算机专业的,而且还和老师一起做过一年半的项目。 有时候是不是有这样的想法,做一个自己的网站、但一直未付诸行动。推荐一个免费小说,视频,还有岛国电影下载地址:https://www.lanzous.com/i64d1ed2009年时, 终于付诸行动了,花了三个月,现学现卖, 熬夜通宵用PHP做了一个小网站,但后续就再没有坚持下去。直到从电信行业转行互联...

html 中文占位符&#12288;_中文占位符 nbsp_z__a的博客-程序员秘密

&amp;amp;#32; == 普通的英文半角空格&amp;amp;#160; == &amp;amp;nbsp; == &amp;amp;#xA0; == no-break space (普通的英文半角空格但不换行)&amp;amp;#12288; == 中文全角空格 (一个中文宽度)&amp;amp;#8194; == &amp;amp;ensp; == en空格 (半个中文宽度)&amp;amp;#8195; == &amp;amp;emsp; == em空格...

Linux下的Command_execution(命令执行)_goodlunatic的博客-程序员秘密

有关命令执行的知识windows 或 linux 下:command1 &amp;&amp; command2 先执行 command1,如果为真,再执行 command2command1 | command2 只执行 command2command1 &amp; command2 先执行 command2 后执行 command1command1 || command2 先执行 command1,如果为假,再执行 command2命令执行漏洞(| || &amp; &amp;&amp; 称为

随便推点

jquery 字符串转数字_jquery 转为数字_guorun18的博客-程序员秘密

1:parseInt(string) 这个函数的功能是从string的开头开始解析,返回一个整数,说起来比较笼统,parseInt("1234blue"); //returns 12342:parseFloat():使用parseFloat()方法的另一不同之处在于,字符串必须以十进制形式表示浮点数,parseFloat()没有基模式。parseFloat("1234blu

定义一个基类BAse,有两个公有成员函数fn1,fn2;私有派生出derived类,如何通过derived类的对象调用基类的函数fn1;_赶梦人。的博客-程序员秘密

具体代码如下:#include &lt;iostream&gt;using namespace std;class Base{ //基类Basepublic: int fn1(){return 0;}; int fn2(){return 0;};};class Derived:private Base{ //派生类Derived;public: int fn1(){return Base::fn1();}//返回Base类中函数fn1,以调用fn1; int fn2(){ret

Tair LDB基于Prefixkey的范围查找性能优化项目提议方案_pkey skey_小敏纸的博客-程序员秘密

基于prefix bloomfilter的过滤思想和get_range接口数据的特点,在导师的指导下,提出如下的简单方案,对get_range接口的范围查找过程进行优化,使得能够根据prefix进行过滤,减少无效的磁盘IO。

《数据结构》实验二:线性表实验_信管1132-05的博客-程序员秘密

《数据结构》实验二:     线性表实验一..实验目的     巩固线性表的数据结构,学会线性表的应用。1.回顾线性表的逻辑结构,线性表的物理存储结构和常见操作。2.学习运用线性表的知识来解决实际问题。3.进一步巩固程序调试方法。4.进一步巩固模板程序设计。

PyQt5 —— 事件和信号_顺利毕业啊的博客-程序员秘密

由于最近在学习pyqt5的相关知识,在网上找了几篇教程看,于是就写了这篇学习笔记。本文只是一些案例的代码以及演示,详细的讲解请看原文。原文链接:https://zetcode.com/gui/pyqt5/中文翻译:http://www.360doc.com/content/19/1022/14/12906439_868371487.shtml文章目录1、Signals &amp; slots2、重构事件处理器3、事件对象4、事件发送5、信号发送1、Signals &amp; slotsQLCD.

系统架构技能之设计模式-工厂模式_weixin_34378969的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...