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 video
summaries.
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)
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,相关的方式同可视化图结构几乎是一致的,故在此不重复。希望这篇文章能够帮助到您。
https://github.com/lanpa/tensorboardX
https://www.endtoend.ai/pytorch-tensorboard