可视化有助于解释和了解深度学习模型的内部结构。通过模型计算图的可视化能够弄清楚神经网络是如何计算的,对于模型的可视化次要包含以下几个方面:
- 模型有多少层
- 每层的输出和输入形态
- 不同的层是如何连贯的?
- 每层应用的参数
- 应用了不同的激活函数
本文将应用 Keras 和 PyTorch 构建一个简略的深度学习模型,而后应用不同的工具和技术可视化其架构。
应用 Keras 构建模型
import keras
# Train the model on Fashion MNIST dataset
(train_images, train_labels), _ = keras.datasets.fashion_mnist.load_data()
train_images = train_images / 255.0
# Define the model.
model = keras.models.Sequential([keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(32, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(10, activation='softmax')
])
#Compile the model
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
Keras 内置可视化模型
在 Keras 中显示模型架构的最简略就是应用 summary()办法
model.summary()
这个办法是 keras 内置的实现,他的原理很简略。就是遍历所有模型层并打印相干细节,如层的输出维度和输入维度、参数数量、激活类型等,咱们也能够用 for 训练遍历实现,代码如下:
for layer in model.layers:
print("Layer Name:" + layer.name)
print("Type of layer:" + layer.__class__.__name__)
print("Input dimesion: {}".format(layer.input_shape[1:]))
print("Output dimesion: {}".format(layer.output_shape[1:]))
print("Parameter Count: {}".format(layer.count_params()))
try:
print("Activation :" + layer.activation.__name__)
print(" ")
except:
print(" ")
这种办法只能提供一些简略的信息,上面咱们介绍一些更好用的办法
Keras vis_utils
keras.utils.vis_utils 提供了应用 Graphviz 绘制 Keras 模型的实用函数。然而在应用之前须要装置一些其余的依赖:
pip install pydot
pip install pydotplus
pip install graphviz
应用 Graphviz,还须要在零碎 PATH 中增加 Graphviz bin 文件夹的门路,设置实现后就能够应用了
model_img_file = 'model.png'
tf.keras.utils.plot_model(model, to_file=model_img_file,
show_shapes=True,
show_layer_activations=True,
show_dtype=True,
show_layer_names=True )
Visualkears
Visualkears 库只反对 CNN(卷积神经网络)的分层款式架构生成和大多数模型的图形款式架构,包含一般的前馈网络。
pip install visualkeras
layered view() 用于查看 CNN 模型架构
visualkeras.layered_view(model,legend=True, draw_volume=True)
TensorBoard
TensorBoard 的 Graphs 可查看模型结构图。对于 Tensorboard,应用如下的办法。
import tensorflow as tf
from datetime import datetime
import tensorboard
如果须要在 notebook 中应用,能够用上面的语句加载 Tensorboard 扩大
%load_ext tensorboard
在 fit() 中应用的 Keras Tensorboard Callback
# Define the Keras TensorBoard callback.
logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)
# Train the model.
model.fit(
train_images,
train_labels,
batch_size=64,
epochs=5,
callbacks=[tensorboard_callback])
model.save("model.h5")
模型训练实现后,启动 TensorBoard 并期待 UI 加载。
%tensorboard --logdir logs
通过单击的“Graphs”就能够看到模型的可视化后果了。
Pytorch 1.8 当前中提供了 from torch.utils.tensorboard import SummaryWriter
也能够生成 tensorboard 的数据间接与 tensorboard 对接。
Netron
Netron 是专门为神经网络、深度学习和机器学习模型设计的查看器。它反对 Keras、TensorFlow lite、ONNX、Caffe,并对 PyTorch、TensorFlow 有实验性反对。
pip install netron
浏览器并输出 netron.app,请单击“关上模型”并抉择 h5 文件的门路上传。
就能够看到每一层的可视化后果了。
在 PyTorch 中构建一个简略的深度学习模型
import torch
from torch import nn
# Get cpu or gpu device for training.
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using {device} device")
class NeuralNetwork(nn.Module):
def __init__(self):
super(NeuralNetwork, self).__init__()
self.flatten = nn.Flatten()
self.linear_relu_stack = nn.Sequential(nn.Linear(28*28, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, 10),
)def forward(self, x):
x = self.flatten(x)
logits = self.linear_relu_stack(x)
return logits
pytorch_model = NeuralNetwork().to(device)
x = torch.randn(512, 28,28,1).requires_grad_(True)
y = pytorch_model(x)
查看模型架构最间接的办法是打印它。
print(pytorch_model)
尽管能够看到残缺的模型架构,然而成果还没有 Keras 的内置函数成果好,上面介绍一个很好用的库解决这个问题。
PyTorchViz
PyTorchViz 依赖于 graphviz,所以也须要装置:
pip install graphviz
pip install torchviz
应用 PyTorchViz 可视化模型非常简单,只须要一个办法即可:
from torchviz import make_dot
make_dot(y, params=dict(list(pytorch_model.named_parameters()))).render("torchviz", format="png")
下面的代码生成了一个 torchviz.png 文件,如下图。
总结
可视化模型架构能够更好的解释深度学习模型。模型构造可视化显示层数、每层数据的输出和输入形态、应用的激活函数以及每层中的参数数量,为优化模型提供更好的了解。
https://www.overfit.cn/post/dff81951b62d48f79ff4995c1eedbbb3
作者:Renu Khandelwal