本节主要学习TensorBoard的安装;add_scalar()的使用以及add_image()的使用;学习tensorboard与Transforms如何使用。
SummaryWriter类是一个直接向log_dir文件夹写入的事件文件,这个事件文件可以被TensorBoard进行解析。
如何使用方法?
def __init__(self, log_dir=None, comment='', purge_step=None, max_queue=10,
flush_secs=120, filename_suffix=''):
可以看到这个初始化函数,需要输入文件夹的名称。
add_scalar方法的使用:
def add_scalar(
self,
tag,
scalar_value,
global_step=None,
walltime=None,
new_style=False,
double_precision=False,
)
需要的参数:
tag (string): 类似于图表的标题。
scalar_value (float or string/blobname): 保存的数值,对应y轴
global_step (int): 多少步,对应x轴 walltime (float): Optional override default walltime (time.time())
with seconds after epoch of event
new_style (boolean): Whether to use new style (tensor field) or old
style (simple_value field). New style could lead to faster data loading.
from torch.utils.tensorboard import SummaryWriter
#导入tensorboard,导入SummaryWriter类
writer = SummaryWriter("logs")
#将需要的事件文件存储到logs底下。
# writer.add_image()
#y=x
for i in range(100):
writer.add_scalar("y=x", i, i)
writer.close()
运行可以看到多了一个logs文件。
如何打开事件文件?
使用anaconda命令行打开,使用指令tensorboard,logdir=事件文件所在的文件夹名;输入tensorboard --logdir=E:\学习笔记\learn_pytorch\logs
,写logs的绝对路径,显示tensorboard打开的地址,绘制的图像如下图所示。
#y=2x
for i in range(100):
writer.add_scalar("y=2x", 2*i, i)
writer.close()
def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats=‘CHW’)
tag:图像标题
img_tensor:在图像显示时要注意图像的数据类型,数据类型可以是torch.Tensor, numpy.array, or string/blobname。
python控制台:
输入image_path="data/train/ants_image/0013035.jpg"
图片的相对地址
img = Image.open(image_path)
读取图片,图片的类型为
导入numpy,import numpy as np
。
img_array = np.array(img)
,将PIL的类型转换成numpy类型。
通过print(img_array.shape)
输出格式为(512, 768, 3),即(H,W,C)(高度,宽度,通道);从PIL到numpy,需要在add_image()中指定shape中每一个数字/维表示的含义。
可以看到打开图片,标题test,第一步step 1。
修改参数,writer.add_image("test", img_array, 2, dataformats='HWC'),
图片地址为蜜蜂的地址。可以看到显示蜜蜂的图片,拖动滑块可以来回切换。
学习torchvision中的transforms,transforms主要是对图片进行变换。
ToTensor把一个`PIL Image或者
numpy.ndarray``转化成一个tensor。
ToPILImage把一个图片转化成PIL图片。
transforms结构及用法:
把一个特定格式的图片经过ToTensor、resize等工具输出想要的图片变换。先创建具体的工具,比如tensor_trans = transforms.ToTensor(),使用工具,给它一个输入,得到结果。
Tensor数据类型包装了反向神经网络所需要的一些参数。
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
# python 的用法 ----tensor数据类型
#通过transforms.ToTensor 去看两个问题
#1.transforms该如何使用
#2.Tensor数据类型和普通数据类型有什么区别,为什么需要tensor数据类型
img_path = "data/train/ants_image/0013035.jpg"
img = Image.open(img_path)
# print(img)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
writer = SummaryWriter("logs")
writer.add_image("Tensor_img", tensor_img)
writer.close()