关键字全网搜索最新排名 『量化投资』:排名第一 『量 化』:排名第一 『机器学习』:排名第四 我们会再接再厉 成为全网优质的金融、技术类公众号 前言 前提:假设你熟悉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文件格式。 不过,它只能作为命令行脚本使用,因此我们不能直接从我们的代码中调用它。 这就是为什么我们想自己来实现它,j2直播,但不要担心,atv直播,它只会是几行代码。 现在让我们将它打包成一个函数,并尝试在更复杂的表达式上使用它。 我们将建立另一个图,计算公式为π* r2的圆的面积。 使用本地TensorBoard实例可视化图形信 GraphViz对于可视化小图很适用,神经网络可以增长到相当大的大小。 TensorBoard允许我们轻松地将的方程组分成有效范围,然后在结果图中将其视觉分离。 但是在这样做之前,让我们尝试用TensorBoard来显示我们之前的图形。 我们需要做的就是使用tf.summary.FileWriter来保存它,它使用一个目录和一个图形,并以TensorBoard可以读取的格式对图形进行序列化。 该目录可以是任何你想要的,只需确保您使用tensorboard --logdir = DIR命令(DIR是您为FileWriter指定的目录)指向同一目录。 接下来,打开控制台并执行FileWriter命令在同一目录下,然后运行tensorboard --logdir = logs。 这将启动一个TensorBoard的实例,你可以访问 localhost:6006。 然后运行到图形部分,你应该会看到一个如下图所示的图形。 请注意,你也可以点击图形中的节点进一步检查。 幸运的是,TensorFlow允许我们将操作连在一起,称为 scope。 但首先,让我们来看一个更复杂的例子,而不使用 scope。 我们将创建一个非常简单的前馈神经网络,具有三层(各自权重W1,W2,W3,偏置b1,b2,b3)。 我们可以通过使用上述的tf.name_scope函数来改善这一点。 让我们重写前馈网络代码,将每个层分成自己的scope。 以下是结果图形,展示了整个网络的紧凑视图(左)以及展开其中一个节点时的外观(右)。 使用云托管的TensorBoard实例来做rendering (责任编辑:本港台直播) |