ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pytorch关于tensorboard和transforms的学习笔记

2022-04-28 09:00:46  阅读:216  来源: 互联网

标签:img self label Pytorch transforms tensorboard trans dir


Dataset

类继承Dataset
    # MyData 类
    class MyData(Dataset):
        def __init__(self, root_dir, label_dir):
            self.root_dir = root_dir
            self.label_dir = label_dir
            self.path = os.path.join(self.root_dir, self.label_dir)
            self.img_path_list = os.listdir(self.path)
    
        def __getitem__(self, index):
            # 得到dataset图片
            img_name = self.img_path_list[index]
            img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)
            img = Image.open(img_item_path)
            label = self.label_dir
            return img,label
    
        def __len__(self):
            return len(self.img_path_list)
使用
    # 实例
    root_dir = "dataset1/train"
    
    # 获得ants数据集
    ants_label_dir = "ants_image"
    ant_dataset = MyData(root_dir=root_dir, label_dir=ants_label_dir)
    
    # 获得bees数据集
    bees_label_dir = "bees_image"
    bee_dataset = MyData(root_dir=root_dir, label_dir=bees_label_dir)
    
    # 整合bees和anys 的数据集
    train_dataset = ant_dataset + bee_dataset

tensorboard

使用tensorboard
    from torch.utils.tensorboard import SummaryWriter
    import numpy as np
    from PIL import Image
    
    
    writer = SummaryWriter("logs")
    
    img_path = "dataset1/train/bees_image/92663402_37f379e57a.jpg"
    img = Image.open(img_path)
    img_array = np.array(img)
    # 图像数据类型 img_tensor
    writer.add_image("img_array1",img_array,2,dataformats='HWC')
    
    
    for i in range(100):
        # Args:
        #   tag (string): Data title
        #   scalar_value : y Value
        #   global_step (int): x Value
        writer.add_scalar("y=x",3*i,i) # 添加标量
    
    writer.close()


打开tensorboard生成的事务文件
Terminal 
    tensorboard --logdir=logs 
        -port=6007

将图片的格式PIL.JpegImagePlugin.JpegImageFile转成add_image接受的格式
    pip install opencv-python
    numpy.array
        img_array = np.array(img)

transforms

transforms.ToTensor
    作用
        将数据转换成神经网络需要的格式
        将数据转换成为 Tensor
    使用
        img_path = "dataset1/train/bees_image/92663402_37f379e57a.jpg"
        img = Image.open(img_path)
        # img_array = np.array(img)
        tensor_trans = transforms.ToTensor()
        tensor_img = tensor_trans(img)

transforms.Normalize
    output[channel] = (input[channel] - mean[channel]) / std[channel]
    例子
        0 < input[channel] < 1
        mean =[0.5,0.5,0.5]  #len(mean) = channel 
        std =[0.5,0.5,0.5]
        output[channel=0] = input[channel=0] * 2 - 1 
        -1 < output[channel=0] < 1

transforms.Resize & transforms.Compose
    # 使用Resize 对图片进行任意的缩放 512,512
    print(img.size)
    trans_resize = transforms.Resize((512, 512))
    img_resize1 = trans_resize(img)
    print(img_resize1)
    # PIL To TOTENSOR
    img_resize1 = trans_totensor(img_resize1)
    writer.add_image("img_resize1", img_resize1)
    
    # 使用Resize 对图片进行等比例的缩放 735 550
    print(img.size)
    trans_resize = transforms.Resize(550)
    trans_compose = transforms.Compose([trans_resize, trans_totensor])
        # img_resize2 = trans_resize(img)
        # img_resize2 = trans_totensor(img_resize2) 

    # PIL To TOTENSOR
    img_resize2 = trans_compose1(img)
    print(img_resize2.size)
    writer.add_image("img_resize2", img_resize2)
transforms.RandomCrop
    # 使用RandomCrop 随机裁剪指定大小的图片
    trans_randomCrop = transforms.RandomCrop([30,30])
    trans_compose2 = transforms.Compose([trans_randomCrop, trans_totensor])
    for i in range(10):
        img_randomCrop = trans_compose2(img)
        print(img_randomCrop.size)
        # PIL To TOTENSOR
        writer.add_image("img_randomCrop", img_randomCrop,i+1)
使用方法总结
    关注方法描述的 输入和输出
    关注方法的参数

Question & Answer

Python中下划线在变量名和方法名中的含义

原文链接:https://blog.csdn.net/cnds123/article/details/118707525

python中的下划线主要分为如下几类:

前置单下划线,如_var,
    主要是用于将变量或方法定义为私有属性。它对于程序员而言是一种提示,这里的私有属性并非如java中的私有,而是一种约定俗成,想强行访问仍旧可以正常访问。
后置单下划线,如var_,
    主要用于将变量区别,如变量名称和关键字冲突,后面加个下划线区别开来。
前置双下划线,如__var,
    类中带前置双下划线的变量或方法,都会触发python解释器的名称修饰,是不能直接通过该名称去访问到的,实现了一定程度上的隔离。
前后都有双下划线,如__var__,
    常见的有__init__()对象构造函数,这类方法是python中的魔法方法(特殊方法),用于特殊用途。
单下划线本身,如_ 在Python REPLs如IDLE Shell中是一个特殊变量(可以表示一个临时值),它表示解释器计算的最后一个表达式的结果。

AttributeError: type object 'Image' has no attribute 'open'

原因
    from PIL.Image import Image
解决方法
    from PIL import Image

关于Python Console中设置相对路径出现乱码问题

Python Console
    定义
        Python程序的Script
问题描述
    如设置 img = "dataset\train\ants"
原因
    '\' 导致字符转义
解决方法
    img = "dataset\train\ants"
    改为
    1. img = "dataset/train/ants"
    2. img = "dataset\\train\\ants"

add_image方法出现TypeError: Cannot handle this data type: (1, 1, 512), |u1

原因
Shape:
    img_tensor: Default is :math:`(3, H, W)`. You can use ``torchvision.utils.make_grid()`` to
    convert a batch of tensor into 3xHxW format or call ``add_images`` and let us do the job.
    Tensor with :math:`(1, H, W)`, :math:`(H, W)`, :math:`(H, W, 3)` is also suitable as long as
    corresponding ``dataformats`` argument is passed, e.g. ``CHW``, ``HWC``, ``HW``.
解决方法
    使用type(img)查看dataformats
    使用add_image时设置对应的dataformats
    例如
        writer.add_image("img_array1",img_array,1,dataformats='HWC')

标签:img,self,label,Pytorch,transforms,tensorboard,trans,dir
来源: https://www.cnblogs.com/Norbury/p/16201468.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有