一.前情提要
1.本文是代码结合知识点,注释即为知识点
2.主要详细讲解Tensorboard以及Transforms代码以及基础知识
3.若想深入学习,建议阅读
P3. Python学习中的两大法宝函数(当然也可以用在PyTorch)_哔哩哔哩_bilibili
二.简述
1.什么是Tensorboard?
TensorBoard是一个由TensorFlow提供的可视化工具,用于帮助开发者可视化、理解和调试TensorFlow程序。它提供了一种直观的方式来查看模型的结构、训练过程中的指标变化、计算图的可视化、嵌入式向量的投影以及其他与TensorFlow相关的信息。TensorBoard可以帮助开发者更好地理解模型的行为,优化模型的性能,以及进行调试和故障排除。
示例:
编辑
2.什么是Transforms?
"Transforms"通常指的是在机器学习和数据处理领域中,对数据进行转换或变换的操作。这些操作可以是简单的数学操作,如缩放、平移、旋转等,也可以是更复杂的操作,如特征提取、数据增强等。
在计算机视觉任务中,数据转换通常用于数据增强,以增加数据的多样性和模型的泛化能力。常见的图像转换操作包括随机裁剪、水平翻转、旋转、缩放等。
在自然语言处理任务中,数据转换可以是对文本进行标记化、分词、词向量化等操作。
在PyTorch和TensorFlow等深度学习框架中,通常提供了丰富的转换函数和工具,以便开发者可以方便地对数据进行转换和处理,从而更好地训练模型。
三.代码以及注释
1.Tensorboard
①
from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter('logs')#存储地址
#实例y=2x
for i in range(100):
writer.add_scalar('y=x',i,i)
#使用writer对象的add_scalar方法,将名为'y=x'的标量数据写入TensorBoard日志。第一个参数是数据的标签或名称,第二个参数是数据的值,第三个参数是当前循环迭代的步数,也可以理解为X轴的值
writer.close()
②
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer=SummaryWriter('logs')
#指定图片位置
image_path=r'hymenoptera_data\train\ants\0013035.jpg'
#打开文件
img_PIL=Image.open(image_path)
#将图片文件转化为numpy格式
img_array=np.array(img_PIL)
#HWC是nupy格式下的数据位置,需要调整
writer.add_image('test',img_array,1,dataformats='HWC')
writer.close()
2.Transforms
①
#为什么我们需要Tensor数据类型?
(①Tensor数据类型在深度学习和神经网络领域中具有重要的作用,主要有以下几个原因:
高效的数学运算:Tensor数据类型支持高效的数学运算,包括矩阵乘法、张量运算等,这对于深度学习中大规模的矩阵计算非常重要。
②并行计算:Tensor数据类型可以利用GPU和其他并行计算设备进行高效的并行计算,加速模型训练和推断过程。
③灵活的维度:Tensor数据类型支持多维数组,能够表示各种复杂的数据结构,包括图像、文本、时间序列等,使得深度学习模型可以处理各种类型的数据。
④自动求导:深度学习框架通常提供了对Tensor数据类型的自动求导功能,可以方便地计算损失函数关于模型参数的梯度,从而进行梯度下降等优化算法的训练过程。
⑤与深度学习框架集成:Tensor数据类型是深度学习框架的核心数据类型之一,与框架的其他功能集成度高,可以方便地与神经网络模型、优化算法等进行交互和整合。
⑥综上所述,Tensor数据类型在深度学习中扮演着至关重要的角色,是实现高效、灵活和可扩展的深度学习模型的基础。)
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
img_path= '../important note'
img_path_abs= r'D:\CODE\code2\important note\0013035.jpg'
img=Image.open(img_path_abs)
writer=SummaryWriter('logs')
#1.了解transforms如何被使用
tensor_trans=transforms.ToTensor()
tensor_img=tensor_trans(img)
writer.add_image('Tensor_img',tensor_img)
writer.close()
②
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
#创建一个SummaryWriter对象,指定日志文件保存路径为'logs'目录
ps:路径的相关笔记:
writer=SummaryWriter('logs')
#使用PIL库中的open()函数打开一个图像文件,需要在括号内填入图像的路径
img=Image.open('')
print(img)#格式是PIL与张量(tensor)形式不一样
#创建一个transforms模块中的ToTensor对象,用于将图像转换为张量(tensor)形式
trans_totensor=transforms.ToTensor
#使用ToTensor对象的__call__()方法将图像转换为张量形式,存储在img_tensor变量中
img_tensor=trans_totensor(img)
#将转换后的张量图像添加到TensorBoard中,第一个参数是显示名称,第二个参数是图像张量
writer.add_image('Totensor',img_tensor)
#打印张量图像的第一个像素点的值,即红色通道的值
print(img_tensor[0][0][0])
#创建一个transforms模块中的Normalize对象,用于对张量图像进行归一化处理
trans_norm=transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
#在transforms.Normalize函数中,[0.5, 0.5, 0.5]是用于指定图像的均值(mean)参数,而[0.5, 0.5, 0.5]是用于指定图像的标准差(standard deviation)参数。
#在图像处理中,归一化是一种常见的预处理操作,用于将图像的像素值缩放到特定的范围。常见的归一化方法之一是将像素值减去均值,然后除以标准差,以使得图像的像素值分布在接近零的范围内。
# 对于RGB图像,每个颜色通道(红、绿、蓝)都有自己的均值和标准差。在这里,[0.5, 0.5, 0.5]作为均值参数,表示将每个颜色通道的像素值减去0.5;同样地,[0.5, 0.5, 0.5]作为标准差参数,表示将每个颜色通道的像素值除以0.5。
# 为什么选择0.5作为归一化的均值和标准差取决于具体的数据集和应用场景。在某些情况下,将均值和标准差设置为0.5可以将图像的像素值约束在-1到1的范围内。这种范围的好处是可以更好地适应某些深度学习模型的输入要求,例如使用Tanh激活函数的模型。
# 需要注意的是,归一化参数的选择可能会因数据集和任务的不同而有所变化,具体的值需要根据实际情况进行调整和优化。
#使用Normalize对象的__call__()方法对张量图像进行归一化处理,存储在img_norm变量中
img_norm=trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize",img_norm,2)
#Resize方式裁剪(512,512)是裁剪的大小
print(img.size)
#这个操作不是简单地缩放图像,而是通过裁剪和缩放来实现
trans_resize=transforms.Resize((512,512))
#PIL格式裁剪后仍是PIL格式
img_resize=trans_resize(img)
#PIL->totensor->tensor
img_resize=trans_totensor(img_resize)
writer.add_image('Resize',img_resize,0)
print(img_resize)
#Compose-resize-2
trans_resize_2=transforms.Resize(512)
#PIL->PIL->tensor,图像首先被调整为最小边长为512的正方形,然后转换为Tensor格式。这个复合操作被称为trans_compose
trans_compose=transforms.Compose([trans_resize_2,trans_totensor])
for i in range(10):
img_crop=trans_compose(img)
writer.add_image('RandomCrop',img_crop,i)
writer.close()
三.结语
1.Tensorboard以及Transforms是学习pytorch不可或缺的基础
(如果不知道怎么安装pytorch,博主另一篇博客详细解答了如何安装pytorch)