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

Posted sereasuesue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tensorflow,pytorch查看模型参数,模型可视化相关的知识,希望对你有一定的参考价值。

参数结构打印


TensorFlow1.12的打印结构:

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

TensorFlow1.12的打印参数:

import tensorflow as tf

reader = 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)


参考链接:https://blog.csdn.net/superjunenaruto/article/details/111332349

可视化

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

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

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

(3)第三方库CNNGraph(  https://github.com/huachao1001/CNNGraph

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

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

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

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

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

(3)使用微软的tensorwatch (只能在jupyter notebook中使用,个人最喜欢这种方式

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

  • netron介绍
    最近经常会遇到这样的情形,拿到一个开源的预训练模型作测试,想把它转到nccn或mnn平台,但是不知道模型中的输入输出名,这个时候我们自然就想到了用可视化工具画出网络来看一看。而netron就是一个可以支持各种框架的神经网络模型可视化工具。
  • 目前支持的框架
    根据netron的github(https://github.com/lutzroeder/Netron
    目前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, .cntk), 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  https://pypi.tuna.tsinghua.edu.cn/simple 

在预训练的模型文件同一目录下新建一个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.onnx

import netron


class 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 = x
        x = F.relu(self.block1(x) + identity)
        x = self.output(x)
        return x


d = 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)

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

https://blog.csdn.net/helei001/article/details/51842531

PyTorch 47.使用netron工具可视化pytorch模型 - 知乎 (zhihu.com) https://www.jianshu.com/p/2d1291d69a54

未完待续

以上是关于Tensorflow,pytorch查看模型参数,模型可视化的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch基础教程33spark或dl模型部署(MLFlow/ONNX/Runtime/tensorflow serving)

判断一个模型是pytorch模型还是tensorflow模型还是scikit模型

tensorflow和pytorch模型之间转换

如何在 TensorFlow、Keras 或 PyTorch 中部署 CoreML 模型?

是否可以使用 C++ 训练在 tensorflow 和 pytorch 中开发的 ONNX 模型?

一行代码切换TensorFlow与PyTorch,模型训练也能用俩框架