keras可视化可以帮助我们直观的查看所搭建的模型拓扑结构,以及模型的训练的过程,方便我们优化模型。
模型可视化又分为模型拓扑结构可视化以及训练过程可视化。
以上一讲的mnist为例,演示不同可视化方法:
1 Netron 查看h5模型
参考《TFlite之格式解析》 Netron部分,Netron 是一款常见的可视化工具,支持网页查看常见的AI模型,支持非常丰富的格式(ONNX, Tensorflow, Pytorch, Keras, Caffe等),网页地址: https://netron.app/
将上一讲生成的keras_mnist.h5导入,得到模型结构,如下图:
2 keras的model.summary()方法
对于一些简单的模型,可以直接使用keras提供的model.summary()方法,如上一讲的mnist模型,代码中:
# 搭建好模型后,加上这一句
print(
"model:")
model.
summary()
输出模型如下:
model:
Model: "sequen
tial"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 784) 0
dense (Dense) (None, 784) 615440
dense_1 (Dense) (None, 10) 7850
=================================================================
Total params: 623,290
Trainable params: 623,290
Non-trainable params: 0
_________________________________________________________________
可见模型有一个flatten层,两个全连接层。
3 keras的graphviz功能
keras.utils.vis_utils模块提供了画出Keras模型的函数(利用graphviz)
import tensorflow as tf
import tensorflow.
keras as keras
# 搭建好模型后,加上下一句
keras.
utils.
plot_model(
model,
to_file=
'model.svg',
show_shapes=
True)
注意:我这里按照官网生成model.png会失败,寻找网上的解决方案也无法解决,只好换用svg格式,svg格式可以通过浏览器直接打开,但是可能显示不全,可以修改model.svg的参数解决,参照参考2:
# 要调节width、height参数,以及viewBox参数
<svg width=
"825pt" height=
"825pt"
viewBox=
"0.00 0.00 825.00 825.00" # viewBox="x, y, width, height"浏览器解析,模型如下:
plot_model函数定义:
tf.
keras.
utils.
plot_model(
model,
# keras model句柄
to_file=
'model.png',
# 保存文件名及格式(这里使用svg格式)
show_shapes=
False,
# 是否显示形状信息,默认不显示
show_layer_names=
True,
# 显示layer名
rankdir=
'TB',
# 横向显示(LR), 纵向显示(TB)
expand_nested=
False,
# 是否将嵌套模型扩展到聚类中
dpi=
96
)
4 训练历史可视化
Keras Model 上的 fit() 方法返回一个 History 对象。History.history 是一个记录了连续迭代的训练/验证损失值和评估值的字典。可以通过matplotlib将数据展示出来(这里就不使用matplotlib画图了,将数据打印出来):
# 截取部分代码如下:
import tensorflow as tf
import tensorflow.
keras as keras
# step4: train
history =
model.
fit(
x_train,
y_train,
batch_size=
64,
epochs=
5)
# 打印history字典中的keys值
print(
history.
history.
keys())
# 获取验证准确率数据
print(
history.
history[
'accuracy'])
# 获取训练时的损失值
print(
history.
history[
'loss'])
执行结果为:
dict_keys(['loss', 'accuracy'])
[0.9143333435058594, 0.9519500136375427, 0.9597333073616028, 0.9615499973297119, 0.9619333148002625]
[3.5814223289489746, 0.38597372174263, 0.26168128848075867, 0.23524414002895355, 0.24421487748622894]
5 训练过程的可视化:keras + Tensorboard
Tensorboard提供训练过程可视化的功能,是通过keras的回调函数来实现的。
# 截取部分代码如下:
import tensorflow as tf
import tensorflow.
keras as keras
from keras.
callbacks import TensorBoard
tbCallBack =
TensorBoard()
# 默认日志放到./logs 文件夹下
history =
model.
fit(
x_train,
y_train,
batch_size=
64,
epochs=
5,
callbacks=[
tbCallBack])
通过shell下执行如下命令,然后使用浏览器可打开tensorboard面板:
tensorboard
--logdir /path/to/logs
Tensorboard 功能强大,对tensorflow、keras、还是pytorch都提供良好支持,这里先不做展开,可以参考3。