Tensorflow 生成*简单*张量流图插图

Tensorflow 生成*简单*张量流图插图,tensorflow,deep-learning,visualization,jupyter-notebook,tensorboard,Tensorflow,Deep Learning,Visualization,Jupyter Notebook,Tensorboard,我正在Jupyter笔记本中使用TensorFlow开发我的第一个深度学习模型,我想生成简化的图表来说明网络的各个层次。具体而言,如图中所示的图形: 这是非常简单和干净,我可以理解发生了什么。这比捕获100%的细节更重要。与TensorBoard生成的图形形成对比,TensorBoard是一个完整的fustercluck: 如何获取tf.Graph对象并自动生成与上面类似的图形?如果它也能显示在Jupyter笔记本上,则可获得额外积分。简而言之,您不能。TF是一个低级库,它没有“高级操作”的

我正在Jupyter笔记本中使用TensorFlow开发我的第一个深度学习模型,我想生成简化的图表来说明网络的各个层次。具体而言,如图中所示的图形:

这是非常简单和干净,我可以理解发生了什么。这比捕获100%的细节更重要。与TensorBoard生成的图形形成对比,TensorBoard是一个完整的fustercluck:


如何获取
tf.Graph
对象并自动生成与上面类似的图形?如果它也能显示在Jupyter笔记本上,则可获得额外积分。

简而言之,您不能。TF是一个低级库,它没有“高级操作”的概念,它有ops,这是它唯一能以你所思考的方式可视化的东西。特别是,从数学的角度来看,图形中没有“神经元”,只有张量彼此相乘,这个附加的“语义”只是为了让人们更容易谈论这个,但它并没有真正编码在图形中


您可以做的是通过为图形的各个部分指定变量_scope将节点分组,然后在TB中显示后,它们将显示为单个节点。它不会给你这种“每神经元样”的视觉化味道,但至少它会隐藏很多细节。创建一个漂亮的、视觉上吸引人的神经网络可视化系统本身就是一门“艺术”,一般来说是一项艰巨的任务

下面是一段代码,我们在PipelineAI笔记本中使用它在Jupyter笔记本中内联显示TensorFlow图:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import re
from google.protobuf import text_format
from tensorflow.core.framework import graph_pb2

def convert_graph_to_dot(input_graph, output_dot, is_input_graph_binary):
    graph = graph_pb2.GraphDef()
    with open(input_graph, "rb") as fh:
        if is_input_graph_binary:
            graph.ParseFromString(fh.read())
        else:
            text_format.Merge(fh.read(), graph)
    with open(output_dot, "wt") as fh:
        print("digraph graphname {", file=fh)
        for node in graph.node:
            output_name = node.name
            print("  \"" + output_name + "\" [label=\"" + node.op + "\"];", file=fh)
            for input_full_name in node.input:
                parts = input_full_name.split(":")
                input_name = re.sub(r"^\^", "", parts[0])
                print("  \"" + input_name + "\" -> \"" + output_name + "\";", file=fh)
        print("}", file=fh)
        print("Created dot file '%s' for graph '%s'." % (output_dot, input_graph))

input_graph='/root/models/optimize_me/linear/cpu/unoptimized_cpu.pb'
output_dot='/root/notebooks/unoptimized_cpu.dot'
convert_graph_to_dot(input_graph=input_graph, output_dot=output_dot, is_input_graph_binary=True)
使用graphviz,您可以在笔记本电脑中使用%%bash magic将.dot转换为.png:

%%bash

dot -T png /root/notebooks/unoptimized_cpu.dot \
    -o /root/notebooks/unoptimized_cpu.png > /tmp/a.out
最后,在笔记本中显示图形:

from IPython.display import Image

Image('/root/notebooks/unoptimized_cpu.png', width=1024, height=768)
以下是在TensorFlow中实现的简单线性回归模型的示例:

以下是用于在生产环境中部署和服务TensorFlow模型的优化版本(也使用上述代码片段呈现):

有关这些类型优化的更多示例和详细信息,请访问