我正在使用 Jupyter 笔记本中的 TensorFlow 开发我的第一个深度学习模型,我想生成简化图,说明网络的各个层。具体来说,如this answer中所示的图表:
这非常简单干净,我可以理解发生了什么。这比捕获100%的细节更重要。与 TensorBoard 生成的图表形成对比,这是一个完整的fustercluck:
如何获取tf.Graph
对象并自动生成类似于上述图形的图形?如果可以在Jupyter笔记本中显示奖励积分。
答案 0 :(得分:1)
简而言之 - 你做不到。 TF是一个低级库,它没有“高级操作”的概念,它有操作,这是它能够以你想到的方式可视化的唯一东西。特别是,从数学的角度来看,图中没有“神经元”,只有张量相互相乘,这种额外的“语义”只会使人们更容易谈论这个,但事实并非如此。在图表中编码。
您可以做的是通过为图的各个部分指定 variable_scope 来对节点进行分组,然后,在TB中显示后,它们将显示为单个节点。它不会给你这种“每神经元样”的可视化风格,但至少它会隐藏许多细节。创造一个漂亮的,视觉上吸引人的神经网络的可视化是一个关于自己权利的“艺术”,并且一般来说是一项艰巨的任务。
答案 1 :(得分:1)
这是我们在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模型的优化版本(也使用上面的代码片段呈现):
的这些优化类型的更多示例和详细信息