• Keras可视化神经网络架构的4种方法


    我们在使用卷积神经网络或递归神经网络或其他变体时,通常都希望对模型的架构可以进行可视化的查看,因为这样我们可以 在定义和训练多个模型时,比较不同的层以及它们放置的顺序对结果的影响。还有可以更好地理解模型结构、激活函数、模型参数形状(神经元数量)等

    keras 中有一些现成的包可以创建我们的神经网络模型的可视化表示。前三个包可以在模型训练之前使用(只需要定义和编译模型);但是Tensor Boards 要求用户在架构可视化之前根据准确的数据训练模型。

    在开始进行可视化之前,我们先需要安装相应的包:

     pip install visualkeras
     pip install ann_visualizer
     pip install graphviz
    
    • 1
    • 2
    • 3

    然后我们创建一个模型,并用这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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    架构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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    架构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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    有了这3个模型,我们将使用4种方法来可视化cnn的结构

    ANN Visualizer

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

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

     model=construct_model()
    
    • 1

    主要参数如下:

    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”)
    
    • 1
    • 2

    上面就是使用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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o1YLyLE1-1667268736993)(http://images.overfit.cn/upload/20221101/a0b07202a79e483fbddf1fd4ed9efe64.png)]

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

    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,)
    
    • 1

    一下是几个参数的介绍:

    • 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

    X2_train和Y2_train是上面代码中没有反映的训练数据集。你可以用你自己的任何训练数据来替换它。

    可以看到TensorBoard 始终会显示操作级别的图表,虽然对于每一层的架构并不明显,但是对于每一个操作缺失非常详细的。

    还需要注意的是,与代码相比该图是上下颠倒的,因为数据从底部流向顶部。但是该图大致类似于 Keras 模型的描述,有额外的边通向其他计算节点。

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

    作者:Angel Das

  • 相关阅读:
    如何看待AIGC技术?【模板】
    c语言练习93:环形链表的约瑟夫问题
    10.25verilog复习,代码规范复盘,触发器复习
    机器学习(24)---AdaBoost(课堂笔记)
    215. 破译密码 - mobius函数 + 整数分块
    二叉树的重建问题
    【代码精读】在optee中注册一个中断
    ADAU1860调试心得(14)单片机启动与控制ADAU1860详解
    【TSP问题】基于遗传算法求解固定的开放式不返回多旅行推销员问题(M-TSP)附matlab代码
    【2012NOIP普及组】T4. 文化之旅 试题解析
  • 原文地址:https://blog.csdn.net/m0_46510245/article/details/127628711