专栏名称: 量化投资与机器学习
公众号主要介绍关于量化投资和机器学习的知识和应用。通过研报,论坛,博客,程序等途径全面的为大家带来知识食粮。版块语言分为:Python、Matlab、R,涉及领域有:量化投资、机器学习、深度学习、综合应用、干货分享等。
目录
相关文章推荐
爱可可-爱生活  ·  【NVIDIA ... ·  2 天前  
爱可可-爱生活  ·  【AI Logo Generator:基于 ... ·  2 天前  
黄建同学  ·  好东西//@宝玉xp:回复@大屁股王:一次就 ... ·  3 天前  
爱可可-爱生活  ·  【macmon:适用于苹果硅处理器的性能监控 ... ·  4 天前  
51好读  ›  专栏  ›  量化投资与机器学习

【精选】Jupyter Notebooks里的TensorFlow图可视化

量化投资与机器学习  · 公众号  · AI  · 2017-06-06 12:06

正文



编辑部

微信公众号

关键字全网搜索最新排名

『量化投资』:排名第一

『量       化』:排名第一

『机器学习』:排名第四


我们会再接再厉

成为全网优质的金融、技术类公众号



前言

前提:假设你熟悉Python,TensorFlow和Jupyter notebooks。 我们的目标只是可视化计算图。


TensorFlow操作形成计算图。 而对于简单的例子,你可能可以查看代码,并立即看到发生了什么,较大的计算图可能不那么明显。 可视化图表可以帮助诊断计算本身的问题,也可以帮助了解TensorFlow中的某些操作是如何工作的以及事情如何组合在一起的。


让我们来看几种不同的可视化TensorFlow图形的例子,最重要的是,如何以一种非常简单和有效的方式来实现。


首先,让我们创建一个简单的TensorFlow图。 常规操作(如使用tf.placeholder)会在所谓的默认图形中创建一个节点。 我们可以通过tf.get_default_graph()访问它,但是我们也可以临时更改它。 在下面的示例中,我们将创建一个tf.Graph对象的新实例,并创建一个添加两个变量的例子。

c=a+b

变量g现在包含操作c = a + b的计算图的定义。 我们可以使用g.as_graph_def()方法获取表达式的图形的文本表示。 虽然这主要用于通过tf.import_graph_def进行序列化和随后的反序列化,但我们将使用它来创建一个 GraphViz DOT graph。


让我们来看看GraphDef的简单表达。 首先,我们查看图中所有节点的名称。


结果有三个节点。 一个是每一个变量,另一个用于添加操作。 占位符变量节点有一个名称,因为我们在调用tf.placeholder时明确命名它们。 如果我们省略了name关键字参数,TensorFlow将简单地生成一个名称,就像在add操作中一样。


接下来,我们可以看看图中的边。 每个GraphDef节点都有一个输入字段,指定具有边缘的节点。 让我们来看看:


我们可以看到,有两个边,每个变量一个。 我们可以直接将其直接提供给GraphViz。



构建 GraphViz DOTgraph

GraphViz是一个非常受欢迎的库,用于绘制图形,树形和其他图形数据结构。 我们将使用Python GraphViz软件包,它提供了一个很好的界面。 我们可以通过安装graphviz直接安装在Jupyter notebooks中。


图形定义本身将非常简单,我们将从TensorFlow本身的一个类似的代码(在graph_to_dot.py中)获得灵感,该代码生成给定GraphDef的DOTgraph文件格式。 不过,它只能作为命令行脚本使用,因此我们不能直接从我们的代码中调用它。 这就是为什么我们想自己来实现它,但不要担心,它只会是几行代码。


现在让我们将它打包成一个函数,并尝试在更复杂的表达式上使用它。


我们将建立另一个图,计算公式为π* r2的圆的面积。



使用本地TensorBoard实例可视化图形信

GraphViz对于可视化小图很适用,神经网络可以增长到相当大的大小。 TensorBoard允许我们轻松地将的方程组分成有效范围,然后在结果图中将其视觉分离。 但是在这样做之前,让我们尝试用TensorBoard来显示我们之前的图形。


我们需要做的就是使用tf.summary.FileWriter来保存它,它使用一个目录和一个图形,并以TensorBoard可以读取的格式对图形进行序列化。 该目录可以是任何你想要的,只需确保您使用tensorboard --logdir = DIR命令(DIR是您为FileWriter指定的目录)指向同一目录。


接下来,打开控制台并执行FileWriter命令在同一目录下,然后运行tensorboard --logdir = logs。 这将启动一个TensorBoard的实例,你可以访问http:// localhost:6006。 然后运行到图形部分,你应该会看到一个如下图所示的图形。 请注意,你也可以点击图形中的节点进一步检查。


幸运的是,TensorFlow允许我们将操作连在一起,称为 scope。 但首先,让我们来看一个更复杂的例子,而不使用 scope。 我们将创建一个非常简单的前馈神经网络,具有三层(各自权重W1,W2,W3,偏置b1,b2,b3)。


我们可以通过使用上述的tf.name_scope函数来改善这一点。 让我们重写前馈网络代码,将每个层分成自己的scope。

以下是结果图形,展示了整个网络的紧凑视图(左)以及展开其中一个节点时的外观(右)。



使用云托管的TensorBoard实例来做rendering

我们将使用从this StackOverflow answer中获取的DeepDream notebook的修改的片段。 它基本上需要tf.GraphDef,将其发送到云端,并将生成的可视化文件的


这是它的整体片段。 所有你需要做的是调用show_graph(),它将处理所有内容,如下面的例子,如上图g所示。 这种方法明显的优点是你不需要运行TensorBoard来可视化数据,但你也需要访问互联网。



关注者


110000+


我们每天都在进步