满满的干货又来了!

本文为大家介绍运行深度可视化工具箱所需的代码,以及使用正则化优化生成神经元可视化的代码。 工具箱和方法在这里有一些简单的描述,并在本文中更正式些:

Jason Yosinski,Jeff Clune,Anh Nguyen,Thomas Fuchs和Hod Lipson。 通过深度可视化了解神经网络。 在2015深度学习研讨会,机器学习国际会议(ICML)上发表。

如果你发现这篇本文或代码有用,可以使用这篇论文。

特性

主要的工具箱窗口是这样的,这里显示一个对汽车车轮响应的卷积的单元。

神经网络是如何实现的(从这个可视化工具开始还不晚)(1)

为了快速浏览工具箱功能(包括上述界面的每个窗格显示的内容),可以观看这段4分钟的YouTube视频(https://www.youtube.com/watch?v=AgkfIQ4IGaM)。 除了从磁盘处理图像文件之外,工具箱还可以运行一个网络摄像头进行实时网络可视化(左下方)。 该工具箱捆绑了本文中显示的默认caffenet-yos模型权重和预先计算的单元可视化。 对于bvlc-googlenet(右下)和压缩包,权重(而不是单位可视化)可以通过脚本下载到各自的目录中。

神经网络是如何实现的(从这个可视化工具开始还不晚)(2)

神经网络是如何实现的(从这个可视化工具开始还不晚)(3)

你也可以形象化你自己的模型。但是请注意,工具箱提供了两组相互独立的功能。第一个很容易与你自己的模型一起使用,第二个更复杂:

向前/向后的道具:图像可以通过网络向前运行以可视化激活,并且任何单位相对于任何其他单位的导数可以使用反向计算来进行。除了传统的反向传播,Zeiler和Fergus(2014)的解除支持作为通过网络向后传递信息的一种方式。前进和后退传球适用于任何可以在Caffe中运行的模型(包括你的!)。

每单元可视化:可以为网络计算三种类型的单元可视化 - 最大图像,最大图像的解码器,通过正则化优化激活最大化 - 但这些可视化必须在工具箱外计算并保存为jpg。然后,工具箱将加载这些jpgs,以便在选择单元时显示它们。可视化必须预先计算,因为它们的实时运行太昂贵了。例如,通过130万的图像训练集找到导致9号激活的图像需要花系统(所有单位)的40个小时。为caffenet-yos模型提供了单位可视化jpgs,但是不能用于bvlc-googlenet或squeezenet模型(不适用于你的,但可以自己计算)。

总结:

模型向前/向后支持每单元可视化
caffenet-yos容易包含
bvlc-googlenet容易不包含,如果需要可以声生成
squeezenet容易不包含,如果需要可以声生成
你的网络容易 在settings_local.py中指向你的模型不包含,如果需要可以声生成

设置和运行工具箱

第0步:编译caffe的主分支(可选但推荐使用)

检出Caffe的主分支并在你的机器上编译它。如果你以前从未使用Caffe,可能需要一点时间才能获得所需的所有库。幸运的是,安装过程是有据可查的。在安装OpenCV依赖项时,也要安装Python绑定(请参阅下面的步骤2)。

注意:编译Caffe时,可以在Makefile.config中设置CPU_ONLY:= 1来跳过所有Cuda / GPU的内容。深度可视化工具箱可以在CPU或GPU模式下与Caffe一起运行,并且使得Caffe在CPU_ONLY模式下首次编译更为简单。如果在启用了GPU选项的情况下编译Caffe,可以通过settings_local.py中的设置在运行时切换CPU与GPU。而且,cuDNN可以通过重新编译Caffe(有或没有cuDNN)来启用或禁用。

第1步:编译caffe的deconv-deep-vis-toolbox分支

而不是使用Caffe的主分支,要使用这个演示,你需要稍微修改deconv-deep-vis-toolbox Caffe分支(支持deconv和一些额外的Python绑定)。获得分支机构并切换到它是很容易的。从你的Caffe目录(即你检查的Caffe的目录,而不是检出DeepVis Toolbox的目录)开始,运行:

神经网络是如何实现的(从这个可视化工具开始还不晚)(4)

如上所述,可以在CPU_ONLY模式下自由编译。

第2步:安装先决条件

超出Caffe要求的唯一先决条件是python-opencv、

scipy和scikit-image,它们可以按如下安装(其他安装选项也可以):

Ubuntu的:

神经网络是如何实现的(从这个可视化工具开始还不晚)(5)

Mac使用自制软件:

使用以下两行之一安装python-opencv,具体取决于是否要使用Intel TBB进行编译以启用并行操作:

神经网络是如何实现的(从这个可视化工具开始还不晚)(6)

使用OpenBLAS安装scipy…

神经网络是如何实现的(从这个可视化工具开始还不晚)(7)

…或没有它

神经网络是如何实现的(从这个可视化工具开始还不晚)(8)

使用pip安装scikit-image:

神经网络是如何实现的(从这个可视化工具开始还不晚)(9)

你可能已经安装了python-opencv绑定作为Caffe安装过程的一部分。 如果从Python中导入cv2,那么就全部设置好了。 类似的导入scipy和skimage。

步骤3:下载并配置深度可视化工具箱代码

你可以把它放在任何你喜欢的地方:

神经网络是如何实现的(从这个可视化工具开始还不晚)(10)

工具箱的最新版本(2016年2月)中的设置与早期版本(2015年4月)有所不同。 如果你有最新版本(推荐!),最简单的步骤是使用默认caffenet-yos模型的模板创建一个settings_local.py文件:

神经网络是如何实现的(从这个可视化工具开始还不晚)(11)

然后编辑settings_local.py文件,使caffevis_caffe_root变量指向你在步骤1中编译的caffe的目录:

神经网络是如何实现的(从这个可视化工具开始还不晚)(12)

有关设置的注意事项:设置现在分成两个文件:一个版本化的settings.py文件,提供所有设置的文档和默认值以及未版本化的settings_local.py文件。 后一个文件允许你覆盖任何默认设置,以根据你的特定设置(Caffe路径,CPU与GPU,网络摄像头设备等)和模型(模型重量,原型文件,工具箱中显示的各个面板的大小, 等等)调整工具箱。 这也可以很容易地将设置调整为与模型一起调整:例如,models / bvlc-googlenet / settings_local.template-bvlc-googlenet.py包含适用于bvlc-googlenet模型的窗口大小等。 要加载新模型,只需更改settings_local.py中的详细信息,也许可以从包含的模板中进行复制。

最后,下载保存为jpg的默认模型权重和相应的top-9可视化(下载一个230MB模型和1.1GB的jpgs以显示可视化):

神经网络是如何实现的(从这个可视化工具开始还不晚)(13)

第4步:运行它!

这就比较简单了:

神经网络是如何实现的(从这个可视化工具开始还不晚)(14)

工具箱运行后,按“h”显示帮助屏幕。你也可以看看一下binds.py来查看各个键的作用。如果窗口对于屏幕来说太大或太小,请将settings_local.py中的global_scale和global_font_size变量设置为小于或大于1.0的值。

故障排除

如果你在运行Deep Vis Toolbox时遇到任何问题,可以尝试以下几点:

确保你可以编译Caffe的主分支(上面的第0步)!如果你不能,请参阅Caffe的详细编译说明。如果遇到问题,caffe-users邮件列表是查找其他人找到的解决方案的好地方。

尝试使用此工具箱的开发分支而不是主要的部分(git checkout dev)。有时候会更高级一些。

如果在切换到backprop或deconv模式时出现错误(AttributeError:'Classifier'对象没有属性'backward_from_layer'),这是因为你编译的Caffe分支没有与backprop / deconv Python绑定。按可以照上述“步骤1:编译Caffe的深层工具箱分支”的指导。

如果左下角的backprop窗格只是灰色,可能是因为backprop和deconv生成全零。默认情况下,Caffe不会在数据层计算衍生物,因为它们不需要更新参数。修复很简单:只需将force_backward:true添加到你的网络原型文件中即可。

如果工具箱运行但按键没有按预期做出响应,则可能是因为按键在不同平台上的行为不同。运行test_keys.py脚本来测试系统上的行为。

其他运行工具箱的方法

如果在本地Mac或Linux计算机上运行工具箱不适用于你,则可能需要尝试以下其中一种选择:

John Moeller为工具箱组装了一个Docker容器。这使得甚至可以在Windows上工作! (需要确认)

如果你绝望,也可以在Amazon EC2上运行工具箱,但显示速度会更慢,图像只能从文件(而不是网络摄像机)加载。

,