深度学习笔记(七):如何用Mxnet来将神经网络可视化

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 这篇文章介绍了如何使用Mxnet框架来实现神经网络的可视化,包括环境依赖的安装、具体的代码实现以及运行结果的展示。

在这里插入图片描述

一:环境依赖

我自己的环境在这篇博客上https://developer.aliyun.com/article/1624222
下面是我为了实现可视化需要安装新的环境依赖包

  • step1:pip install mxnet-cu100 -i https://pypi.douban.com/simple
  • step2:pip install graphviz==0.8.4
    并把F:\Anaconda3\envs\cv_car\Lib\site-packages\graphviz添加到电脑环境中
  • step3: pip install python-graphviz==0.16
  • https://graphviz.org/download/到这里下载Graphviz,我需要的是windows的版本所以我下的是下图这个

在这里插入图片描述
我安装在C:\Program Files\Graphviz,然后右键此电脑–高级系统设置–环境变量–在用户变量中添加C:\Program Files\Graphviz\bin\dot.exe,在系统变量中添加下面这些

在这里插入图片描述

二:具体代码

这个代码是实现MTCNN的四个级联网络,分别是P-Net、R-Net、O-Net、L-Net

import mxnet as mx

def pnet():
    data = mx.sym.Variable('data')
    conv1 = mx.sym.Convolution(data=data, kernel=(3, 3), num_filter=10, name='conv1')
    prelu1 = mx.sym.LeakyReLU(data=conv1, act_type='prelu', name='prelu1')
    pool1 = mx.sym.Pooling(data=prelu1, kernel=(2, 2), stride=(2, 2), pool_type='max', \
                           pooling_convention='full', name='pool1')
    conv2 = mx.sym.Convolution(data=pool1, kernel=(3, 3), num_filter=16, name='conv2')
    prelu2 = mx.sym.LeakyReLU(data=conv2, act_type='prelu', name='prelu2')
    conv3 = mx.sym.Convolution(data=prelu2, kernel=(3, 3), num_filter=32, name='conv3')
    prelu3 = mx.sym.LeakyReLU(data=conv3, act_type='prelu', name='prelu3')
    score = mx.sym.Convolution(data=prelu3, kernel=(1, 1), num_filter=2, name='score')
    prob = mx.sym.SoftmaxActivation(data=score, mode='channel', name='prob')
    bbox_pred = mx.sym.Convolution(data=prelu3, kernel=(1, 1), num_filter=4, name='bbox_pred')
    landmark_pred = mx.sym.Convolution(data=prelu3, kernel=(1, 1), num_filter=10, name='landmark_pred')
    out = mx.sym.Group([prob, bbox_pred, landmark_pred])
    return out

def rnet():
    data = mx.sym.Variable('data')
    conv1 = mx.sym.Convolution(data=data, kernel=(3, 3), num_filter=28, name='conv1')
    prelu1 = mx.sym.LeakyReLU(data=conv1, act_type='prelu', name='prelu1')
    pool1 = mx.sym.Pooling(data=prelu1, kernel=(3, 3), stride=(2, 2), pool_type='max', \
                           pooling_convention='full', name='pool1')
    conv2 = mx.sym.Convolution(data=pool1, kernel=(3, 3), num_filter=48, name='conv2')
    prelu2 = mx.sym.LeakyReLU(data=conv2, act_type='prelu', name='prelu2')
    pool2 = mx.sym.Pooling(data=prelu2, kernel=(3, 3), stride=(2, 2), pool_type='max', \
                           pooling_convention='full', name='pool2')
    conv3 = mx.sym.Convolution(data=pool2, kernel=(2, 2), num_filter=64, name='conv3')
    prelu3 = mx.sym.LeakyReLU(data=conv3, act_type='prelu', name='prelu3')
    fc = mx.sym.FullyConnected(data=prelu3, num_hidden=128, name='fc')
    prelu4 = mx.sym.LeakyReLU(data=fc, act_type='prelu', name='prelu4')
    score = mx.sym.FullyConnected(data=prelu4, num_hidden=2, name='score')
    prob = mx.sym.SoftmaxActivation(data=score, name='prob')
    bbox_pred = mx.sym.FullyConnected(data=prelu4, num_hidden=4, name='bbox_pred')
    landmark_pred = mx.sym.FullyConnected(data=prelu4, num_hidden=10, name='landmark_pred')
    out = mx.sym.Group([prob, bbox_pred, landmark_pred])
    return out

def onet():
    data = mx.sym.Variable('data')
    conv1 = mx.sym.Convolution(data=data, kernel=(3, 3), num_filter=32, name='conv1')
    prelu1 = mx.sym.LeakyReLU(data=conv1, act_type='prelu', name='prelu1')
    pool1 = mx.sym.Pooling(data=prelu1, kernel=(3, 3), stride=(2, 2), pool_type='max', \
                           pooling_convention='full', name='pool1')
    conv2 = mx.sym.Convolution(data=pool1, kernel=(3, 3), num_filter=64, name='conv2')
    prelu2 = mx.sym.LeakyReLU(data=conv2, act_type='prelu', name='prelu2')
    pool2 = mx.sym.Pooling(data=prelu2, kernel=(3, 3), stride=(2, 2), pool_type='max', \
                           pooling_convention='full', name='pool2')
    conv3 = mx.sym.Convolution(data=pool2, kernel=(3, 3), num_filter=64, name='conv3')
    prelu3 = mx.sym.LeakyReLU(data=conv3, act_type='prelu', name='prelu3')
    pool3 = mx.sym.Pooling(data=prelu3, kernel=(2, 2), stride=(2, 2), pool_type='max', \
                           pooling_convention='full', name='pool3')
    conv4 = mx.sym.Convolution(data=pool3, kernel=(2, 2), num_filter=128, name='conv4')
    prelu4 = mx.sym.LeakyReLU(data=conv4, act_type='prelu', name='prelu4')
    fc = mx.sym.FullyConnected(data=prelu4, num_hidden=256, name='fc')
    prelu5 = mx.sym.LeakyReLU(data=fc, act_type='prelu', name='prelu5')
    score = mx.sym.FullyConnected(data=prelu5, num_hidden=2, name='score')
    prob = mx.sym.SoftmaxActivation(data=score, name='prob')
    bbox_pred = mx.sym.FullyConnected(data=prelu5, num_hidden=4, name='bbox_pred')
    landmark_pred = mx.sym.FullyConnected(data=prelu5, num_hidden=10, name='landmark_pred')
    out = mx.sym.Group([prob, bbox_pred, landmark_pred])
    return out

def lnet():
    data = mx.sym.Variable('data')
    conv1 = mx.sym.Convolution(data=data, kernel=(3, 3), num_filter=50, num_group=5, name='conv1')
    prelu1 = mx.sym.LeakyReLU(data=conv1, act_type='prelu', name='prelu1')
    pool1 = mx.sym.Pooling(data=prelu1, kernel=(3, 3), stride=(2, 2), pool_type='max', \
                           pooling_convention='full', name='pool1')
    conv2 = mx.sym.Convolution(data=pool1, kernel=(3, 3), num_filter=100, num_group=5, name='conv2')
    prelu2 = mx.sym.LeakyReLU(data=conv2, act_type='prelu', name='prelu2')
    pool2 = mx.sym.Pooling(data=prelu2, kernel=(3, 3), stride=(2, 2), pool_type='max', \
                           pooling_convention='full', name='pool2')
    conv3 = mx.sym.Convolution(data=pool2, kernel=(2, 2), num_filter=200, num_group=5, name='conv3')
    prelu3 = mx.sym.LeakyReLU(data=conv3, act_type='prelu', name='prelu3')
    conv4 = mx.sym.Convolution(data=prelu3, kernel=(3, 3), stride=(3, 3), num_filter=100, num_group=5, name='conv4')
    prelu4 = mx.sym.LeakyReLU(data=conv4, act_type='prelu', name='prelu4')
    conv5 = mx.sym.Convolution(data=prelu4, kernel=(1, 1), num_filter=50, num_group=5, name='conv5')
    prelu5 = mx.sym.LeakyReLU(data=conv5, act_type='prelu', name='prelu5')
    conv6 = mx.sym.Convolution(data=prelu5, kernel=(1, 1), num_filter=10, num_group=5, name='conv6')
    out = mx.sym.Reshape(conv6, shape=(-1, 10))
    return out

if __name__ == '__main__':
    p = pnet()
    r = rnet()
    o = onet()
    l = lnet()
    mx.viz.plot_network(p, shape={'data': (1, 3, 12, 12)}).render('tmp/pnet')
    mx.viz.plot_network(r, shape={'data': (1, 3, 24, 24)}).render('tmp/rnet')
    mx.viz.plot_network(o, shape={'data': (1, 3, 48, 48)}).render('tmp/onet')
    mx.viz.plot_network(l, shape={'data': (1, 15, 24, 24)}).render('tmp/lnet')
AI 代码解读

三:运行结果

在这里插入图片描述
P-Net:

在这里插入图片描述
R-Net:

在这里插入图片描述
O-Net:

在这里插入图片描述
L-Net:

在这里插入图片描述
觉得有用点赞支持一下❤

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
打赏
0
0
0
0
85
分享
相关文章
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
神经常微分方程(Neural ODEs)是深度学习领域的创新模型,将神经网络的离散变换扩展为连续时间动力系统。本文基于Torchdyn库介绍Neural ODE的实现与训练方法,涵盖数据集构建、模型构建、基于PyTorch Lightning的训练及实验结果可视化等内容。Torchdyn支持多种数值求解算法和高级特性,适用于生成模型、时间序列分析等领域。
209 77
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
188 7
深入解析图神经网络注意力机制:数学原理与可视化实现
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
77 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
122 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
258 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
140 3
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
106 17
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
71 10
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。