在jupyter notebook上进行可视化时无法成功得到网络的可视化图片,其中碰到了数个问题。单独根据这些问题一一进行解答,不是我想做的。
接下来,直接给出正确的神经网络可视化操作步骤
神经网络的可视化有两种方法,分别对应以下两个库:
(1)HiddenLayer 库
(2)PytorchViz 库
如上图所示,依次进行:
(A)中选择当前python环境,
(B)中选择 Not installed ,
©中,输入graphviz,
(D)中,勾选graphviz 和 python-graphviz
(E)中,选择Apply.
等待安装完毕,成功后应该能看到如下界面:
本文在jupyter notebook上对两种可视化方法进行验证。
(1)HiddenLayer 库
import hiddenlayer as h
simplenet.to('cpu')
x = torch.randn(12288, 1024).requires_grad_(True) # 为网络定义一个随机的张量作为输入值
simplenet_hlVis = h.build_graph(simplenet, x) # 获取绘制图像的对象
simplenet_hlVis.theme = h.graph.THEMES["blue"].copy() # 指定主题颜色
simplenet_hlVis.save("./simplenet_hlVis.png",format='png') # 保存图像的路径
(2)PyTorchViz 库
from torchviz import make_dot
import graphviz
simplenet.to('cpu')
x = torch.randn(12288, 1024).requires_grad_(True) # 定义一个网络的输入值
y = simplenet(x) # 获取网络的预测值
simplenetVis = make_dot(y, params=dict(list(simplenet.named_parameters()) + [('x', x)]))
simplenetVis.format = "png"
# 指定文件生成的文件夹
simplenetVis.directory = "data"
# 生成文件
simplenetVis.view()
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__() # 第一句话,调用父类的构造函数
self.fc1 = nn.Linear(12288, 1024)
self.fc2 = nn.Linear(1024, 512)
self.fc3 = nn.Linear(512, 128)
self.fc4 = nn.Linear(128, 32)
self.fc5 = nn.Linear(32,2)
# self.weight = nn.Parameter(torch.randn(ndim, 1)) # 定义权重
# self.bias = nn.Parameter(torch.randn(1)) # 定义偏置
def forward(self, x):
x = x.view(-1, 12288) # 利用view()将x转换为一维张量
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = F.relu(self.fc3(x))
x = F.relu(self.fc4(x))
x = self.fc5(x)
# x = F.softmax(self.fc5(x))
return x
simplenet = SimpleNet()