【深度学习实战】---TensorBoard网络可视化

【深度学习实战】—TensorBoard网络可视化

前记

为了能够更加深层次的理解我们的网络结构,不必要是画一份简简单单的网络的草图(如【深度学习实战】迈出第一步------编写第一个神经网络),那么我们可以借助TensorFlow上面的可视化工具TensorBoard来可视化我们网络结构。只能说用了一次这样的工具,你会发现,你对网络中数据的流动会更加的清楚,上面还有一系列的维度表示,可以清楚的让你同时明白网络结构与某个cell的维度

主要环境

jupyter==1.0.0

future==0.17.1	# 这个插件和下面两个插件的安装是因为pytorch所使用的tensorboard是1.14 or above,现在博主更新这篇文章的时候还没有1.14,所有需要这两个插件
tb-nightly==1.14.0a20190520 

tensorboard==1.13.1  # 需要下载这个插件
tensorboardX==1.6
tensorflow==2.0    #需要TensorFlow的支持
tensorflow-tensorboard==0.1.8
torch==1.1.0
torchvision==0.2.2.post3

主干

刚开始接触的时候,本来以为要画大精力去学习,所以从学神经网络然后到这么长时间一直拖到了现在,然后,接触了官网上面的教程,如果我们只是想可视化网络的话,其实是非常简单的,下面就开始画图分析之旅:

建议可以先看一下开源项目:tensorboardX

【个人感觉pytorch 1.1 上支持的tensorboard更像是tensorboardX

首先分析Pytorch上面可以支持tensorboard的类别:

导入相关的包,然后去查看源码:

import torch.utils.tensorboard,点进去可以查看:

整体看一下可以支持的类型,得到的结果如下:

scalar, image, figure, histogram, audio, text, graph, onnx_graph, embedding, pr_curve and videosummaries.

PS:整体里面的方法也不是很长,但是很详细,可以直接作为API来查看,上面对各种类型的操作起来基本类似,那么就可以直接采用tensorboardX上面给出的代码示例来分析如下:

导入相关的工具

因为pytorch直接支持了tensorboard,可以至直接导入相关的工具

import torch
import torch.nn as nn
from torch.utils.tensorboard import SummaryWriter
# from tensorboardX import SummaryWriter   pytorch 1.0 使用tensorboardX来可视化网络,pytorch1.1
# 直接支持了tensorboard

定义网络结构

然后是定义我们自己的网络结构,可以首先直接画一个网络结构简略图,最后再到tensorboard里面去详细的查看整体的结构与维度问题。

class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        # 定义卷积层1,先进行二维卷积,再经过激活函数,最后经过最大池化
        self.conv1 = nn.Sequential(  # input_size=(1*28*28)
            nn.Conv2d(1, 6, 5, 1, 2),
            nn.ReLU(),  # (6*28*28)
            nn.MaxPool2d(kernel_size=2, stride=2),  # output_size=(6*14*14)
        )
		# 定义卷积层2
        self.conv2 = nn.Sequential(
            nn.Conv2d(6, 16, 5),
            nn.ReLU(),  # (16*10*10)
            nn.MaxPool2d(2, 2)  # output_size=(16*5*5)
        )
        # fc1,先将数据经过线性激活,然后在经过激活函数
        self.fc1 = nn.Sequential(
            nn.Linear(16 * 5 * 5, 120),
            nn.ReLU()
        )
        self.fc2 = nn.Sequential(
            nn.Linear(120, 84),
            nn.ReLU()
        )
        self.fc3 = nn.Linear(84, 10)

    # 定义前向传播过程,输入为x
    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        # nn.Linear()的输入输出都是维度为一的值,所以要把多维度的tensor展平成一维
        x = x.view(x.size()[0], -1)
        x = self.fc1(x)
        x = self.fc2(x)
        x = self.fc3(x)
        return x

生成可视化网络

这里主要是我们可视化网络的过程,借助于SummaryWriter,通过上面讲解到的add_graph方法,将图可视化,

    def add_graph(self, model, input_to_model=None, verbose=False, **kwargs):
    	pass

从上面可以看到add_graph()方法主要是接收model以及input_to_model这两个参数

dummy_input = torch.rand(13, 1, 28, 28)  # 假设输入13张1*28*28的图片
model = LeNet()
with SummaryWriter(comment='LeNet') as w:
    w.add_graph(model, input_to_model=dummy_input)

【深度学习实战】---TensorBoard网络可视化_第1张图片

踩坑记录

1.博主在写这篇文章的时候是在使用pytorch1.1,然后遇到各种问题,特别是ImportError: TensorBoard logging requires TensorBoard with Python summary writer installed. This should be available in 1.14 or above.

因为还没有tensorboard 1.14 还没有出来,那么必须要安装tb-nightly这个工具包

2.打开tensorboard 这个工具的时候,安装官网给定教程,直接使用

tensorboard --logdir runs

然后会发现始终打不开我们想要的界面,要运行下面这条指令,不仅要指定运行文件夹,还有指定运行的本机地址:

tensorboard --logdir=D:\python\tensorBoardX\runs --host=127.0.0.1

3.各种import问题:更新一下相关的框架到最新版再试一下。

总结

本篇文章主要是讲网络可视化相关的问题,可视化网络,可以将黑盒的神经网络可视化。另外几个内容,如可视化scalar,相关的方式同可视化图结构几乎是一致的,故在此不重复。希望这篇文章能够帮助到您。

Reference

https://github.com/lanpa/tensorboardX

https://www.endtoend.ai/pytorch-tensorboard

你可能感兴趣的:(Deep,learning,tensorboard,可视化,pytorch,1.1)