admin 管理员组

文章数量: 887021

Tensorflow,pytorch查看模型参数,模型可视化

参数结构打印


TensorFlow1.12的打印结构:

for var in tf.trainable_variables():print("Listing trainable variables ... ")print(var)

TensorFlow1.12的打印参数:

import tensorflow as tfreader = tf.train.NewCheckpointReader('logs/pre-trained/lasted_model.ckpt')global_variables = reader.get_variable_to_shape_map()
for key in global_variables:print("tensor_name: ", key)print(reader.get_tensor(key))


pytorch 打印结构:

net = resnet()#实例化网络
print(net)###pytorch 打印参数:
for name, parameters in net.named_parameters():#打印出每一层的参数的大小print(name, ':', parameters.size())for param_tensor in net.state_dict():  # 字典的遍历默认是遍历 key,所以param_tensor实际上是键值print(param_tensor, '\t', net.state_dict()[param_tensor])

python打印到文本中:

f = open('text.txt', 'w')
print('abc', file = f, flush=False)
f.close()


已经保存模型参数查看

# # #读取参数
import torch
import numpy as np
import pickle
file=open("metadata.pkl","rb")
data=pickle.load(file)
print(data)
file.close()
y = torch.load("GKT-Transition-Scheduler.pt")
print(y)


参考链接:

可视化

tensorflow的模型结构可视化方法:

(1)使用自带的tensorboard(不直观)

(2)使用netron工具打开(.pd 或者是.meta文件)

(3)第三方库CNNGraph(  )

(4)tensorspace.js (这个比较高级,没用过)

(5)高层API中keras的可视化

pytorch的模型结构可视化方法:

(1)使用tensorboardX(不太直观)

(2)使用graphviz加上torchviz (依赖于graphviz和GitHub第三方库torchviz)

(3)使用微软的tensorwatch (只能在jupyter notebook中使用)

(4)使用netron可视化工具(.pt 或者是 .pth 文件)

   (5) Visdom

  • netron介绍
    最近经常会遇到这样的情形,拿到一个开源的预训练模型作测试,想把它转到nccn或mnn平台,但是不知道模型中的输入输出名,这个时候我们自然就想到了用可视化工具画出网络来看一看。而netron就是一个可以支持各种框架的神经网络模型可视化工具。
  • 目前支持的框架
    根据netron的github()
    目前netron支持 ONNX (.onnx, .pb, .pbtxt), Keras (.h5, .keras), Core ML (.mlmodel), Caffe (.caffemodel, .prototxt), Caffe2 (predict_net.pb, predict_net.pbtxt), Darknet (.cfg), MXNet (.model, -symbol.json), ncnn (.param) and TensorFlow Lite (.tflite)。
    并且实验性支持TorchScript (.pt, .pth), PyTorch (.pt, .pth), Torch (.t7), Arm NN (.armnn), BigDL (.bigdl, .model), Chainer (.npz, .h5), CNTK (.model, tk), Deeplearning4j (.zip), MediaPipe (.pbtxt), ML.NET (.zip), MNN (.mnn), OpenVINO (.xml), PaddlePaddle (.zip, model), scikit-learn (.pkl), TensorFlow.js (model.json, .pb) and TensorFlow (.pb, .meta, .pbtxt, .ckpt, .index)。
  • 安装使用
#指定清华源安装
pip install netron -i   

在预训练的模型文件同一目录下新建一个python文件netrontest.py

import netron
modelPath = "你的模型文件名.扩展名"
netron.start(modelPath)

在同一目录下打开命令行窗口执行python文件

python netrontest.py

这是会自动打开浏览器到地址http://localhost:8080
显示网络图。此时即可查看输入输出或其中层的信息。

我的模型只保留了相关参数

测试

import torch.nn as nn
import torch.nn.functional as F
import torch.onnximport netronclass model(nn.Module):def __init__(self):super(model, self).__init__()self.block1 = nn.Sequential(nn.Conv2d(64, 64, 3, padding=1, bias=False),nn.BatchNorm2d(64),nn.ReLU(inplace=True),nn.Conv2d(64, 32, 1, bias=False),nn.BatchNorm2d(32),nn.ReLU(inplace=True),nn.Conv2d(32, 64, 3, padding=1, bias=False),nn.BatchNorm2d(64))self.conv1 = nn.Conv2d(3, 64, 3, padding=1, bias=False)self.output = nn.Sequential(nn.Conv2d(64, 1, 3, padding=1, bias=True),nn.Sigmoid())def forward(self, x):x = self.conv1(x)identity = xx = F.relu(self.block1(x) + identity)x = self.output(x)return xd = torch.rand(1, 3, 416, 416)
m = model()
o = m(d)onnx_path = "onnx_model_name.onnx"
torch.onnx.export(m, d, onnx_path)netron.start(onnx_path)

使用Visdom在 PyTorch 中进行可视化

安装

Visdom的安装很简单,直接使用命令pip install visdom安装即可。 在安装完成后,使用命令 python -m visdom.server 在本地启动服务器,启动后会提示It's Alive! You can navigate to http://localhost:8097 这就说明服务已经可用,我们打开浏览器,输入http://localhost:8097 即可看到页面。

端口8097是默认的端口可以在启动命令后加 -port参数指定端口,常用的参数还有 --hostname-base_url

Visdom的服务在启动时会自动下载一些静态文件,这里坑就来了,因为某些无法描述的原因,导致下载会失败,比如类似这样的提示 ERROR:root:Error 404 while downloading @1.4.0 就说明静态文件没有下载完全,这样有可能就会打不开或者页面中没有菜单栏,那么需要手动进行下载,这里我打包了一份正常的静态文件,直接复制到Lib\site-packages\visdom中即可。

如果不知道conda的环境目录在哪里,可以使用conda env list 查看

Environments

Environments的作用是对可视化区域进行分区,每个用户都会有一个叫做main的默认分区,如图所示:  在程序指定的情况下,默认的图表都会放到这里面

Panes

Panes是作为每一个可视化图表的容器,可以使用生成的图表,图片,文本进行填充,我们可以对Panes进行拖放,删除,调整大小和销毁等操作:  Panes和Environments是一对多的关系,即一个Environments可以包含多个Panes

VIEW

在对Panes进行调整后,可以通过VIEW对状态进行管理

这里我们使用官方的DEMO来做样例

env = Visdom() 
assert env.check_connection() #测试一下链接,链接错误的话会报错

这里生成sin和cos两条曲线数据

Y = np.linspace(0, 2 * math.pi, 70)
X = np.column_stack((np.sin(Y), np.cos(Y)))

使用茎叶图展示

env.stem(X=X,Y=Y,opts=dict(legend=['Sine', 'Cosine']))

可以通过env参数指定Environments,如果名称包含了下划线_那么visdom会跟根据下划线分割并自动分组

envtest = Visdom(env='test_mesh')
assert envtest.check_connection()

生成一个网格图

x = [0, 0, 1, 1, 0, 0, 1, 1]
y = [0, 1, 1, 0, 0, 1, 1, 0]
z = [0, 0, 0, 0, 1, 1, 1, 1]
X = np.c_[x, y, z]
i = [7, 0, 0, 0, 4, 4, 6, 6, 4, 0, 3, 2]
j = [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3]
k = [0, 7, 2, 3, 6, 7, 1, 1, 5, 5, 7, 6]
Y = np.c_[i, j, k]
envtest.mesh(X=X, Y=Y, opts=dict(opacity=0.5))

使用Tensorboard在 PyTorch 中进行可视化

Tensorboard 安装

首先需要安装tensorboard

pip install tensorboard

~~ 然后再安装tensorboardx ~~

~~ pip install tensorboardx ~~

pytorch 1.1以后的版本内置了SummaryWriter 函数,所以不需要再安装tensorboardx了

安装完成后与 visdom一样执行独立的命令 tensorboard --logdir logs 即可启动,默认的端口是 6006,在浏览器中打开 http://localhost:6006/ 即可看到web页面。

前三种详见pytorch 网络结构可视化方法汇总(三种实现方法详解) - 灰信网(软件开发博客聚合) (freesion)

PyTorch 47.使用netron工具可视化pytorch模型 - 知乎 (zhihu) 

visdom - PyTorch 中文手册 (pytorchbook)

未完待续

本文标签: TensorFlow pytorch查看模型参数,模型可视化