加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘孜站长网 (https://www.0836zz.com.cn/)- 运维、物联设备、数据计算、智能推荐、云管理!
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

看懂这篇指南,包你掌握神经网络的“黑匣子”

发布时间:2019-06-04 23:54:13 所属栏目:经验 来源:读芯术
导读:人类的神经网络是如何运行的?这个问题让很多数据科学家感到困惑。解释某个简单神经网络的工作机制非常容易,但是当某个计算机视觉项目中的层数增加1000倍时,该怎么办呢? 终端用户想要了解模型是如何得到最终结果时,仅用纸和笔来解释深度神经网络的工作机
副标题[/!--empirenews.page--]

“人类的神经网络是如何运行的?”这个问题让很多数据科学家感到困惑。解释某个简单神经网络的工作机制非常容易,但是当某个计算机视觉项目中的层数增加1000倍时,该怎么办呢?

终端用户想要了解模型是如何得到最终结果时,仅用纸和笔来解释深度神经网络的工作机制是行不通的。那么,如何让神经网络不再像“黑匣子”一样神秘?

可视化可以做到这一点——将神经网络的不同特征可视化能使一切变得清晰明了,也能更直观地呈现卷积神经网络(CNN) 成千上万的图像训练结果。

神经网络

本文将介绍卷积神经网络可视化的不同技术。此外,我们还将致力于从这些可视化中提取不同看法,以完善卷积神经网络模型。

注意:本文对神经网络和卷积神经网络的基础知识点将不再进行讨论。以下三篇文章可帮助你重温或了解相关知识点。

  • A Comprehensive Tutorial to learn Convolutional Neural Networks from Scratch (从零开始学习卷积神经网络的全面教程):https://www.analyticsvidhya.com/blog/2018/12/guide-convolutional-neural-network-cnn/?utm_source=blog&utm_medium=understanding-visualizing-neural-networks
  • An Introductory Guide to Deep Learning and Neural Networks (深度学习与神经网络入门指南):https://www.analyticsvidhya.com/blog/2018/10/introduction-neural-networks-deep-learning/?utm_source=blog&utm_medium=understanding-visualizing-neural-networks
  • Fundamentals of Deep Learning – Starting with Artificial Neural Network (深度学习的基础——从人工神经网络开始):https://www.analyticsvidhya.com/blog/2016/03/introduction-deep-learning-fundamentals-neural-networks/?utm_source=blog&utm_medium=understanding-visualizing-neural-networks

为什么要用可视化解码神经网络?

这是一个值得研究的问题。有很多方法可以帮助理解神经网络的工作原理,为何要转向可视化这条非同寻常的路呢?

通过一个例子来回答这个问题。例如,某个项目需要对雪豹和阿拉伯豹等动物图像进行分类。从直觉上讲,可以通过图像的背景进行区分。

这两种动物的栖息地截然不同。大多数雪豹的图片都以雪为背景,而大多数阿拉伯豹的图片背景多为广阔的沙漠。

看懂这篇指南,包你掌握神经网络的“黑匣子”

那么问题来了:一旦模型开始对雪和沙漠的图像进行分类,如何确保模型已经正确学习了如何区分这两种豹的特征呢?答案就是可视化。

可视化帮助我们理解是什么特征可以引导模型以对图像进行分类。

有很多种方法可以将模型可视化,本文将介绍其中的几种方法。

建立模型体系结构

学习的最好方式是对概念进行编码。因此,本文将直接深入研究Python代码,提供实用的编码指南。

本文使用VGG16体系结构,并在ImageNet数据集上使用预先训练的权重。第一步,将模型导入程序并了解其体系结构。

之后使用Keras中的‘model.summary()’函数将模型体系结构可视化。这是在进入模型构建环节之前十分关键的一步。因为需要确保输入和输出的形状与问题陈述相匹配,因此需要将模型概述可视化。

  1. #importing required modules 
  2. from keras.applications import VGG16 
  3. #loading the saved model 
  4. #we are using the complete architecture thus include_top=True 
  5. model = VGG16(weights='imagenet',include_top=True) 
  6. #show the summary of model 
  7. model.summary() 

下表即为由上述代码生成的模型概述。

神经网络

该表记录了模型的详细架构以及每一层可训练参数的数量。希望ni可以花一些时间阅读以上内容,并了解我们目前达到的水平。

只训练模型层的一个子集(特征提取)时,这一点尤为重要。通过生成模型概述,可以确保不可训练参数的数量与不想训练的层数相匹配。

此外,开发人员可以使用可训练参数总量来检查GPU是否能够分配足够内存来训练模型。对于使用电脑工作的大多数人来说,这项任务很常见,但也是一种挑战。

认识卷积神经网络各层

了解模型的整体架构以后,就可以尝试深入探究神经网络的每一层了。

事实上,访问Keras模型的各层并提取每一层的相关参数是非常容易的,这包括权重和过滤器数量等其他信息。

首先,创建字典,并将层名称映射到其相应的特征和权重。

  1. #creating a mapping of layer name ot layer details  
  2. #we will create a dictionary layers_info which maps a layer name to its charcteristics 
  3. layers_info = {} 
  4. for i in model.layers: 
  5.     layers_info[i.name] = i.get_config() 
  6.  
  7. #here the layer_weights dictionary will map every layer_name to its corresponding weights 
  8. layer_weights = {} 
  9. for i in model.layers: 
  10.     layer_weights[i.name] = i.get_weights() 
  11.  
  12. print(layers_info['block5_conv1']) 

(编辑:甘孜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读