Keras网络结构可视化工具

来源:互联网 发布:linux ssh配置文件详解 编辑:程序博客网 时间:2024/05/19 18:13

Keras的utils包里带了一个vis_utils组件(2.0.2版本),该组件应该就是早先版本的Keras当中的visualize_utils组件。利用该组件,可以很轻松地用一行代码,将已建立神经网络模型的示意图输出到一张图片。例如,一个简单的多层前馈网络模型,可以按照如下模式输出 
这里写图片描述 
  虽然不是特别详细,不过也算得上帮助理解的示意图,因此有必要开发一下这个功能。而由于该可视化组件依赖于一些外部的应用,要想正常使用也需要一些额外的配置。 
  Keras的可视化依赖于pydot和GraphViz两个组件,首先介绍一下GraphViz的安装。

GraphViz的安装

  GraphViz是一个用于可视化的应用。在Python中,调用其功能需要具备两个条件:

  • 系统上安装了GraphViz的应用程序;
  • Python环境里安装了GraphViz的Python库。

  首先,先进行应用程序的安装,还是去官网下载,进入:

GraphViz的Windows版本官方下载页面

我装的是目前为止的最新版,也就是2.38版本 
这里写图片描述

  由于官方表明目前安装程序已经没法有效地处理PATH环境变量,所以其实这里选哪个包下都行,并且可以安装到自定义路径,后面会给出让应用程序可以被Python库调用的方法。 
  下载完成后,直接安装或解压到一个路径(默认或自定义的都行)。然后,可以在python中安装对应的GraphViz库,直接在Windows命令行中进行pip安装即可,命令如下

pip install graphviz
  • 1

  等待pip下载安装完成后,GraphViz组件的安装就结束了。

pydot的安装

  pydot虽然只涉及python库,但情况反而比GraphViz还复杂一点……首先,写此文之时,最新的兼容python 3.5的pydot版本已经是1.2.3,但该版本已经不能与新版的keras兼容。因为,新版pydot废弃了find_graphviz()方法,而keras的vis_utils中,其_check_pydot_()函数仍然会调用pydot.find_graphviz()方法,故会报错。而能够兼容keras的pydot版本为1.1.0,这一问题原文形容在此:Keras中神经网络可视化模块keras.utils.visualize_util 的安装配置与错误解决办法 
  解决这一问题,如果你正在使用比较新版本的keras(如目前的2.0.2),最简便的方式是安装pydot_ng。目前,2.0.2版本的keras已经以import pydot_ng来取代了pydot,而pydot_ng则可以直接通过pip安装:

pip install pydot_ng
  • 1

  安装完成后,需要建立pydot到GraphViz应用程序的连接,让pydot可以找到GraphViz的应用。官方建议的方式是,在环境变量PATH中添加GraphViz的bin目录,而find_graphviz()方法会在Path变量、注册表、常用目录等地方尝试搜索GraphViz的应用。 
  然而一来我第一次尝试将GraphViz/bin目录添加到PATH中后,find_graphviz()依然找不到目标程序;二来因为电脑里装了不少环境,PATH里再加一个无非是添乱……因此这里给出一个彻底解决方案:直接改pydot.find_graphviz()的代码。 
  进入“$Anaconda安装目录$/Lib/site-packages/pydot_ng”目录,用代码编辑器打开“__init__.py”文件,定位到< line 615>的位置,在代码注释“# Failed to find GraphViz”之前加入以下代码块:

# Local Method    myGraphVizPath = '你的GraphViz安装目录\\bin'     progs = __find_executables(myGraphVizPath)    if progs is not None:        return progs 
  • 1
  • 2
  • 3
  • 4
  • 5

  记得把变量改到具体的安装目录,然后保存退出编辑器。接下来就简单验证一下安装,打开Windows命令行,输入python进入python交互环境,逐行运行如下代码:

import pydot_ngpydot_ng.find_graphviz()
  • 1
  • 2

如果正常找到程序的话,你会得到如下输出 
这里写图片描述

  这样,keras就可以正常调用pydot_ng和GraphViz了。

  没想到写到这里就写了一堆……CIFAR-10的测试下次再写吧,恩,就酱= =