Pytorch深度学习- Tensorboard的使用以及图像变换transform的使用(小土堆)

Tensorboard中的SummaryWriter使用

  1. 导入数据包
from torch.utils.tensorboard import SummaryWriter
  1. 构造函数方法
#那么生成的数据文件都存在于logs文件夹下
writer = SummaryWriter("logs")
  1. add_scalar
    • 代码示例
'''  
tag:数据标题  
global_step:x轴数据  
scalar_value:y轴数据  
'''
#运行结束会在logs文件夹下产生一个文件
for i in range(100):  
    writer.add_scalar("y=x",i,i)
  • 如何打开文件
    1. 打开terminal控制台
    2. 输入tensorboard --logdir=(事件文件所在文件夹名) (可选)–port=6007等
    3. 点击所出现的地址
  1. add_image
    • 代码示例
'''  
tag:数据标题,  
img_tensor:是ndarray类型,是有数据要求的,一般默认为(3,H,W),如果要修改,则需要在最后加上dataformats设置,e.g. ``CHW``, ``HWC``, ``HW``,可以使用shape来查看是什么形状  
'''  
image_path = "study_dataset/train/ants_image/0013035.jpg"  
#这里获取的图片是PIL类型的  
image_PIL = Image.open(image_path)  
#这里转换为ndarray类型  
image_array = np.array(image_PIL)  
#这里第一个test为title
#如果再写一个将step=1变为step=2而不改变其他的,那么就会在一个里面显示,如果要单独显示,则需要将title改为其他的
writer.add_image("test",image_array,1,dataformats='HWC')
  • 打开方式与add_scalar一样

torchvision的transforms使用(图片格式转换)

如何使用
  1. 导入数据包
from torchvision import transforms
  1. 使用:这里注意我第一次使用时出现报错->numpy版本高于2.0
    • 出现的问题解决方案:在终端中输入以下指令
pip install numpy<2
  • 使用代码示例
img_path = "study_dataset/train/ants_image/0013035.jpg"  
#这里导入的img是PIL类型的  
img = Image.open(img_path)  
#实例化工具  
tensor_trans = transforms.ToTensor()  
img_tensor = tensor_trans(img)  
print(type(img_tensor))

常见的Transforms

package名 使用方法 输入类型 输出类型
PIL->Image Image.open() String PIL
cv2 cv.imread() String ndarrays
torchvision->transforms ToTensor() PIL/ndarray tensor
torchvision->transforms ToPILImage() tensor/ndarray PIL
torchvision->transforms Normalize() tensor tensor
torchvision->transforms Resize() PIL PIL
torchvision->transforms Compose() expect:tensor 未定
torchvision->transforms RandomCrop() expect:tensor tensor
  • normalize的使用(归一化)
  1. API
#mean:均值
#std:标准差
#如果是图片那么就存在rgb数组,每次要提供的就是一组向量
Normalize(mean,std,inplace=False)
  1. 代码示例
img_path = "study_dataset/train/ants_image/0013035.jpg"  
#这里导入的img是PIL类型的  
img = Image.open(img_path)  
#转换为tensor类型  
trans_tenstor = transforms.ToTensor()  
img_tensor = trans_tenstor(img)  
#构造转换器  
tensor_trans = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])  
#传入tensor类型  
img_norm = tensor_trans(img_tensor)
#最后如果使用add_image导入并查看时,rgb更换所以颜色会更换
  • Resize使用-1
  1. API
#输入PIL类型,并给出尺寸,e.g(H,W)->会将其调整为HW尺寸
Resize(pic_size,interpolation=InterpolationMode.BILINEAR, max_size=None, antialias=True)
  1. 代码示例
img_path = "study_dataset/train/ants_image/0013035.jpg"  
#这里导入的img是PIL类型的  
img = Image.open(img_path) 
trans_resize = transforms.Resize((512,512))  
img_resize = trans_resize(img)
  • Resize使用-2
    1. API
#初始化时需要给其一个转换器列表,功能合并
Compose([transform,transform,...])
  1. 代码示例
#Compose - resize - 2  
trans_resize_2 = transforms.Resize(512)  
#等于将totensor与resize功能合并  
#这里要注意图片转换顺序-->img是PIL类型,trans_resize_2需要的输入是PIL类型,输出也是PIL类型,trans_tenstor需要的输入时需要的时PIL/ndarray类型,输出tensor所以这个顺序可以,如果调换那么在第一次时就已经将PIL类型转换为tensor类型那么下一个转换器就无法输入
trans_compose = transforms.Compose([trans_resize_2,trans_tenstor])  
img_compose = trans_compose(img)
  • 随机裁剪RandomCrop
    1. API
#size是一个序列(H,W)/(size,size)或者int
RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode="constant")
  1. 代码示例
#1.随机裁剪图片中的一部分
trans_RC = transforms.RandomCrop(512)  
trans_compose_2 = transforms.Compose([trans_RC,trans_tenstor])  
img_RC = trans_compose_2(img)

你可能感兴趣的:(深度学习,人工智能,python)