关于人工智能:Keras可视化神经网络架构的4种方法

咱们在应用卷积神经网络或递归神经网络或其余变体时,通常都心愿对模型的架构能够进行可视化的查看,因为这样咱们能够 在定义和训练多个模型时,比拟不同的层以及它们搁置的程序对后果的影响。还有能够更好地了解模型构造、激活函数、模型参数形态(神经元数量)等

keras 中有一些现成的包能够创立咱们的神经网络模型的可视化示意。前三个包能够在模型训练之前应用(只须要定义和编译模型);然而Tensor Boards 要求用户在架构可视化之前依据精确的数据训练模型。

在开始进行可视化之前,咱们先须要装置相应的包:

 pip install visualkeras
 pip install ann_visualizer
 pip install graphviz

而后咱们创立一个模型,并用这4个包来进行可视化:

在理论应用时咱们心愿的是通过可视化来比照模型架构,所以这里定义三个具备不同超参数 CNN 模型。咱们创立了用户定义的函数来别离构建具备不同数量的 CNN 层、池化层和最初的密集层的三个不同模型。

架构1:浅层CNN+分类头

 def construct_model():
     model = Sequential()
     model.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 1), activation=’relu’))
     model.add(Conv2D(filters=64, kernel_size=(3, 3), activation=’relu’))
     model.add(MaxPool2D((2, 2)))
     model.add(Flatten())
     model.add(Dense(256, activation=’relu’))model.add(Dense(12, activation=’softmax’))
     model.compile(loss=’categorical_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
     return model

架构2:深层CNN+mlp分类头

 def sconstruct_model():
     smodel = Sequential()
     smodel.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 3), activation=’relu’))
     smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation=’relu’))
     smodel.add(MaxPool2D((2, 2)))
     smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
     smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
     smodel.add(MaxPool2D((2, 2)))
     smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
     smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
     smodel.add(MaxPool2D((2, 2)))
     smodel.add(Flatten())
     smodel.add(Dense(256, activation=’relu’))
     smodel.add(Dense(12, activation=’softmax’))
     #optimizer = Adam(lr=0.001)
     smodel.compile(loss=’categorical_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
     #model.summary()
     return smodel

架构3:深层CNN+分类头

 def cconstruct_model(learningRate):
     smodel = Sequential()
     smodel.add(Conv2D(filters=32, kernel_size=(3, 3), input_shape=(128, 128, 1), activation=’relu’))
     smodel.add(Conv2D(filters=32, kernel_size=(3, 3), activation=’relu’))
     smodel.add(MaxPool2D((2, 2)))
     smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation=’relu’))
     smodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation=’relu’))
     smodel.add(MaxPool2D((2, 2)))
     smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
     smodel.add(Conv2D(filters=128, kernel_size=(3, 3), activation=’relu’))
     smodel.add(MaxPool2D((2, 2)))
     smodel.add(Flatten())
     smodel.add(Dense(256, activation=’relu’))
     smodel.add(Dense(256, activation=’relu’))
     smodel.add(Dense(12, activation=’softmax’))
     optimizer = Adam(lr=learningRate)
     smodel.compile(loss=’categorical_crossentropy’, optimizer=optimizer, metrics=[‘accuracy’])
     smodel.summary()
     return smodel

有了这3个模型,咱们将应用4种办法来可视化cnn的构造

ANN Visualizer

ANN Visualizer 的 Python 模块能够通过几行代码来可视化神经网络。它应用 Keras 和 Python 的 Graphviz 模块来生成一个整洁的神经网络图。它是最早的几个可视化包之一,然而最近曾经不更新了,咱们先介绍他是因为它算是最早呈现的,也是最有名的。

ANN Visualizer可视化须要首先编译模型

 model=construct_model()

主要参数如下:

ann_viz(model, view=True, filename=”network.gv”, title=”MyNeural Network”)

model—Keras的模型

view—在调用ann_viz()之后显示可视化图形

filename—文件名

title—自定义题目

 from ann_visualizer.visualize import ann_viz
 ann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN — Model 1 — Simple Architecture”)

下面就是应用ANN Visualizer创立的construct_model()的可视化图。能够看到,如果模型太大显示成果不会太好,这可能也是ANN Visualizer被淘汰的一个起因。

Visual Keras

Visualkeras能够更容易地查看Keras的神经网络设计(能够独自查看,也能够作为TensorFlow的一部分)。

 model1=construct_model()
 model2=sconstruct_model()
 model3=cconstruct_model(0.009)
 
 import visualkeras
 from PIL import ImageFont
 visualkeras.layered_view(model1, legend=True)
 visualkeras.layered_view(model2, legend=True)
 visualkeras.layered_view(model3, legend=True)

能够通过可视化来比照出不同层的大小,这个还是很有用的

Keras Model Plot

keras.utils.plot_model是keras的内建绘制Keras模型函数,它应用了Graphviz和pydot包。从图上可,它不如下面应用的包直观,但它概述了程序模型的根本体系结构。

 tf.keras.utils.plot_model(model1,to_file="model.png",show_shapes=True,show_dtype=False,show_layer_names=True,rankdir="TB",expand_nested=True,dpi=96,layer_range=None,show_layer_activations=True,)

一下是几个参数的介绍:

  • model: Keras编译后的模型或模型对象的实例
  • to_file:保留的文件名
  • Show_shapes:显示神经网络中每一层的尺寸和形态
  • show_layer_activation:显示神经元外部应用的激活函数

TensorBoard

TensorBoard 容许用户可视化不同模型运行的日志。日志的范畴能够从跟踪任何模型验证度量(不同轮次的准确率、召回率、RMSE、MAPE 和 MSE)到创立模型的架构图。它是一个弱小的工具,能够可视化预期模型是否与预期设计匹配,同时深刻理解如何应用操作级图更改模型。

咱们须要先加载 TensorBoard,而后创立一个日志目录。

 %load_ext tensorboard
 from datetime import datetime
 from tensorflow import keras
 
 logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
 tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

应用Keras TensorBoard回调函数,在训练前指定日志目录。而后通过向model.fit()提供这个回调来保证数据被记录在TensorBoard中。

 model.fit(X2_train, Y2_train,batch_size=64,epochs=5,callbacks=[tensorboard_callback])

X2_train和Y2_train是下面代码中没有反映的训练数据集。你能够用你本人的任何训练数据来替换它。

能够看到TensorBoard 始终会显示操作级别的图表,尽管对于每一层的架构并不显著,然而对于每一个操作缺失十分具体的。

还须要留神的是,与代码相比该图是上下颠倒的,因为数据从底部流向顶部。然而该图大抵相似于 Keras 模型的形容,有额定的边通向其余计算节点。

https://avoid.overfit.cn/post/95ee9b5017e840fa85ac63921a9d0def

作者:Angel Das

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据