深度学习笔记(七):如何用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')

三:运行结果

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

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

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

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

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

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能 运维
网管不再抓头发:深度学习教你提前发现网络事故
网管不再抓头发:深度学习教你提前发现网络事故
81 2
|
2月前
|
机器学习/深度学习 人工智能 算法
Wi-Fi老是卡?不如试试让“深度学习”来当网络管家!
Wi-Fi老是卡?不如试试让“深度学习”来当网络管家!
237 68
|
5月前
|
机器学习/深度学习 人工智能 运维
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
134 8
|
6月前
|
机器学习/深度学习 数据可视化 PyTorch
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
473 7
深入解析图神经网络注意力机制:数学原理与可视化实现
|
6月前
|
机器学习/深度学习 数据采集 算法
基于MobileNet深度学习网络的MQAM调制类型识别matlab仿真
本项目基于Matlab2022a实现MQAM调制类型识别,使用MobileNet深度学习网络。完整程序运行效果无水印,核心代码含详细中文注释和操作视频。MQAM调制在无线通信中至关重要,MobileNet以其轻量化、高效性适合资源受限环境。通过数据预处理、网络训练与优化,确保高识别准确率并降低计算复杂度,为频谱监测、信号解调等提供支持。
|
6月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
372 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
6月前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
7月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
532 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
9月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
219 17
|
9月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
174 10

热门文章

最新文章