Pytorch关于tensorboard和transforms的学习笔记
作者:互联网
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