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

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

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络:从理论到实践
【10月更文挑战第35天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力成为科技界的宠儿。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,在图像识别和视频分析等领域展现出了惊人的潜力。本文将深入浅出地介绍CNN的工作原理,并结合实际代码示例,带领读者从零开始构建一个简单的CNN模型,探索其在图像分类任务中的应用。通过本文,读者不仅能够理解CNN背后的数学原理,还能学会如何利用现代深度学习框架实现自己的CNN模型。
|
1天前
|
机器学习/深度学习 人工智能 自动驾驶
深入解析深度学习中的卷积神经网络(CNN)
深入解析深度学习中的卷积神经网络(CNN)
8 0
|
3天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习的奇迹:如何用神经网络识别图像
【10月更文挑战第33天】在这篇文章中,我们将探索深度学习的奇妙世界,特别是卷积神经网络(CNN)在图像识别中的应用。我们将通过一个简单的代码示例,展示如何使用Python和Keras库构建一个能够识别手写数字的神经网络。这不仅是对深度学习概念的直观介绍,也是对技术实践的一次尝试。让我们一起踏上这段探索之旅,看看数据、模型和代码是如何交织在一起,创造出令人惊叹的结果。
11 0
|
4天前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第32天】本文将介绍深度学习中的一个重要分支——卷积神经网络(CNN),以及其在图像识别领域的应用。我们将通过一个简单的代码示例,展示如何使用Python和TensorFlow库构建一个基本的CNN模型,并对其进行训练和测试。
|
10天前
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
61 9
|
7天前
|
机器学习/深度学习 人工智能 监控
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术在图像识别领域的应用,并分析了当前面临的主要挑战。随着卷积神经网络(CNN)的发展,图像识别的准确性和效率得到了显著提升。然而,数据不平衡、模型泛化能力、计算资源消耗等问题仍然是制约深度学习在图像识别领域进一步发展的关键因素。本文将详细介绍深度学习在图像识别中的应用案例,并讨论解决现有挑战的可能策略。
|
1天前
|
机器学习/深度学习 人工智能 测试技术
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术,尤其是卷积神经网络(CNN)在图像识别任务中的最新进展和面临的主要挑战。通过分析不同的网络架构、训练技巧以及优化策略,文章旨在提供一个全面的概览,帮助研究人员和实践者更好地理解和应用这些技术。
19 9
|
1天前
|
机器学习/深度学习 算法 数据处理
深度学习在图像识别中的应用与挑战
本文深入探讨了深度学习技术在图像识别领域的应用,分析了其背后的原理、主要算法以及在实际场景中的应用效果。同时,文章也指出了当前深度学习在图像识别领域面临的挑战,包括数据不平衡、模型泛化能力、计算资源需求等问题,并展望了未来的研究方向。
|
4天前
|
机器学习/深度学习 传感器 监控
深度学习在图像识别中的突破与应用
随着人工智能的飞速发展,深度学习已经成为推动图像识别技术进步的核心动力。本文旨在探讨深度学习在图像识别领域的最新突破及其广泛应用,通过分析卷积神经网络(CNN)等关键技术的发展,揭示深度学习如何革新传统图像处理方式,提升识别精度和效率。文章还将概述当前面临的挑战与未来发展趋势,为读者提供一个全面而深入的技术视角。
|
9天前
|
机器学习/深度学习 监控 自动驾驶
深度学习在图像识别中的应用与挑战
本文探讨了深度学习在图像识别领域的应用现状,分析了其面临的主要技术挑战和解决方案。通过对比传统方法和深度学习模型的优势,揭示了深度学习如何推动图像识别技术的发展,并展望了未来的研究方向。
下一篇
无影云桌面