深度学习零基础学习之路——第三章 数据可视化TensorBoard和TorchVision的介绍

Python深度学习入门

第一章 Python深度学习入门之环境软件配置
第二章 Python深度学习入门之数据处理Dataset的使用
第三章 数据可视化TensorBoard和TochVision的使用
第四章 UNet-Family中Unet、Unet++和Unet3+的简介
第五章 个人数据集的制作



前言

  我们通过上一节的学习知道了如何使用DataSet类读取文件夹中的图片数据,并对数据进行整理排序。接下来我们就需要将这些数据进行可视化显示,方便对数据进行分析和对比。我在学习之前对于数据的可视化会使用Python的画图库matlibplot,通过这个库我们可以绘制很多图形,比如折线图、柱状图等等。但是这个画图库太麻烦了,需要自己编写代码,今天我们要聊的TensorBoard不需要编写代码就可以显示数据,并支持多种类型的数据,比如离散数据、图片数据等等。


一、TensorBoard是什么?

  Tensorboard是TensorFlow提供的一组可视化工具,可以帮助开发者方便的理解、调试、优化TensorFlow 程序。为后续的学习提供了巨大的方便。

  说到调试,我们一般的调试都是通过Pycharm在某行代码处打个断点,然后一步一步执行,并关注Pycharm的变量池,找到问题点。关键是有的时候我们的程序并没有错误,只是训练结果并不是很满意,想优化程序,但是在运行过程中我们不知道每一步得到的结果是什么,变量池的数据也不是很直观。这时TensorBoard就可以解决以上问题。TensorBoard可以展示我们程序的训练过程结果,更直观的关注代码的效果。
在这里插入图片描述

二、TensorBoard的使用

1、引入库

from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np
import os

2、读入数据

  我们利用上一章下载的蚂蚁和蜜蜂的数据作为数据集,使用TensorBoard进行显示。

image_path = 'H:\\learn\\hymenoptera_data\\train\\ants_image' # 此处为数据集的文件夹路径
image_name = os.listdir(image_path)

该处我们从文件夹中获取到了蚂蚁数据集的图片名称,因为我们要显示图片,所以我们要将每一张图片放入TensorBoard中。

3、加载数据

  首先我们需要通过SummaryWriter创建一个存储数据的文件夹,然后再向这个文件夹中添加需要显示的数据和图片。

writer = SummaryWriter('logs')		# 在当前目录下创建logs文件夹,存储需要显示的数据
#  因为我们的数据都存储在一个列表中,因此我们需要遍历列表将每张图片给加载进去,这里我们测试10张图片
for i in range(10):
	image = Image.open(os.path.join(image_path, image_name[i])) # 读取图片
	image_array = np.array(image)	# 将image图片的类型转换成TensorBoard需要的类型
	writer.add_image('test', image_array, i, dataformats='HWC')

# 我们再测试一下显示折线图
for i in range(100):
	writer.add_scalar("y = 2x",3 * i, i)

writer.close() # 最后记得关闭writer

  然后运行代码,可以看到程序运行完后会终止。然后我们打开Terminal,进入到pytorch环境运行以下代码

(pytorch) PS H:> tensorboard --logdir=‘logs’ --port=‘6006’

  这个 --port=‘6006’ 这条指令可以修改界面显示的端口号,默认是6006。

在这里插入图片描述
  出现上面的输出,就说明TensorBoard启动成功,我们点击链接或者复制用浏览器打开即可显示数据内容。

在这里插入图片描述

4、方法详解

接下来我们来解析上面代码用到的方法:

  1. add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats=“CHW”)
    tag:该参数是设置图表的标题title,区别于其他图表。
    imge_tensor: 该参数是设置需要显示的图片,并且要注意的是图片的尺寸格式要求,一般是tensor类型的图片。
    global_step:该参数类似于设置每一张图片的角标,就是图片演化步数。
    walltime:这个参数用的比较少,我们用默认值就好了。
    dataformats:设置数据图片格式,默认是’CHW’,意思是(C:通道数,H:高,W:宽)。
  2. add_scalar(self,tag,scalar_value,global_step=None,walltime=None,new_style=False,double_precision=False)
    tag:和add_image()方法的tag是一个意思,设置图表的标题。
    scalar_value:是图表每一步的值,可以看成是折线图的Y值。
    global_step:是图表训练的步数,可以看成是折线图的X值。
    walltime、new_style、double_prcision:这几个参数一般也用不着,使用默认值即可。

  我们通过上面TensorBoard显示的图来理解一下这几个参数的含义。

在这里插入图片描述

三、torchvision的使用

  torchvision是Pytorch的一个图形库,在后续深度学习的学习过程中相当重要,因此我们需要着重探究torchvision下的包。

  • torchvision.transforms:这个包主要用于一些图形变换,例如图片格式的转换、图片的正规化等等,这个用的比较多。
  • torchvision.dataset: 这个包用于加载数据集的,并且可以通过这个包去下载比较常用的数据集,比如CIFAR10、MNIST等等
  • torchvision.models: 该模块包含了一些已经定义好的模型,例如:AlexNet, VGG, ResNet 和 Densenet等等

1、torchvision.transforms的使用

  我们通过查看transforms的源代码可以看到它提供了很多图形变换的类,我们可以通过Pycharm的Structure来查看他所有的方法。
在这里插入图片描述

  • 其中ToTensor类是比较重要的,这个类是用来将一张‘PIL Image’类型或者‘numpy.ndarray’类型的图片转成tensor类型的图片,在后续的图片处理过程中很多地方都需要tensor类型的图片,例如上面使用TensorBoard显示图片的时候就需要tensor类型的照片。
  • Compose类顾名思义就是组合变换,他可以对一张图片进行多种变换,看一下源代码举的例子:
Example:
        >>> transforms.Compose([
        >>>     transforms.CenterCrop(10),					#首先对图片进行中心裁剪
        >>>     transforms.PILToTensor(),					#然后将图片转换成tensor类型的
        >>>     transforms.ConvertImageDtype(torch.float),	#再对图片进行类型转换
        >>> ])
  • Normalize类是对一张tensor类型的图片进行正则化的,因此输入图片的类型必须是tensor类型的
  • Resize类是对输入图片进行尺寸的修改,这里好像是对输入图片没有要求。

  torchvision包中常用的就是上面这几个类,在后续的学习中我们会经常用到,因此我们要熟练掌握,也可以经常去看看torchvision的官网:https://pytorch.org/vision/stable/index.html

2、torchvision.dataset的使用

  torchvision.dataset包我们主要是用来下载数据集的,在之前的学习中,我们都是通过数据集链接在浏览器中下载的,比如第二章中的蚂蚁和蜜蜂的数据集。今天通过dataset包我们就可以下载比较常用的数据集,比如CIFAR10、MNIST等等。
在这里插入图片描述

class CIFAR10(VisionDataset):
    """`CIFAR10 <https://www.cs.toronto.edu/~kriz/cifar.html>`_ Dataset.

    Args:
        root (string): Root directory of dataset where directory
            ``cifar-10-batches-py`` exists or will be saved to if download is set to True.
        train (bool, optional): If True, creates dataset from training set, otherwise
            creates from test set.
        transform (callable, optional): A function/transform that takes in an PIL image
            and returns a transformed version. E.g, ``transforms.RandomCrop``
        target_transform (callable, optional): A function/transform that takes in the
            target and transforms it.
        download (bool, optional): If true, downloads the dataset from the internet and
            puts it in root directory. If dataset is already downloaded, it is not
            downloaded again.

    """
    def __init__(
        self,
        root: str,
        train: bool = True,
        transform: Optional[Callable] = None,
        target_transform: Optional[Callable] = None,
        download: bool = False,
    )

通过上面的源码我们可以知道下载CIFAR10数据集需要传入5个参数:

  1. root:这个参数就是数据集下载到本地的哪个文件夹下,就是存放数据集的地址路径。
  2. train:这个参数是用来选择下载的是训练集(True)还是测试集(False),默认是训练集。
  3. transform:这个参数是将下载的数据集根据transform进行图形变换,就是我们上面学的torchvision.transform类。
  4. target_transform:这个参数用的比较少,一般使用默认值,我觉得应该这个参数的意思是是否需要在target上进行图形变换。
  5. download:这个参数是用来决定是否从网上下载,如果已下载了就不会再次下载了。一般我们会将它设置为True。

  接下来我们就通过代码来测试一下通过torchvision.dataset类从网上下载CIFAR10数据集。

在这里插入图片描述
  通过上面的截图我们可以看到数据集已经下载下来了,在同一目录下创建了一个cifar10文件夹,虽然下载速度比较慢,但是这样下载这些数据集比较方便。我们也可以通过这种方式去下载其他的数据集。

总结

  以上的TensorBoard和TorchVision是Pytorch中比较重要的库,在后续深度学习的学习过程中会经常用到这些知识点。因此我们还是需要反复的去使用这些库函数和方法,并且要多去看官方文档,官方文档才是最具权威性的学习资料。然后大家有什么问题可以在下方评论留言,大家一起学习进步!!

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值