本文最后更新于:星期二, 八月 2日 2022, 9:32 晚上

这是TensorBoard笔记的第三篇,讲述的是如何令TensorBoard生成模型架构图。

TensorBoard不但可以展示存在的图片和张量,还可以生成图片,诸如模型图等。通过TensorBoard的GRAPHS选项卡,可以快速查看模型结构的预览图,并确保其符合设计预期。

比如我们定义模型如下:

model = keras.models.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy'])

通过TensorBoard中的GRAPHS选项卡,我们看到执行图。图是倒置的,数据从下到上流动,因此与代码相比是上下颠倒的。

可以更改Tag,选择Keras,选择左边的Conceptual Graph查看概念图,双击Sequential,得到概念图。概念图更像是代码。

有的时候我们希望得到计算图,研究数据经过了何种计算。比如下面这个函数:

# Sample data for your function.
x = tf.random.uniform((3, 3))
y = tf.random.uniform((3, 3))

# The function to be traced.
@tf.function
def my_func(x, y):
  # A simple hand-rolled layer.
  return tf.nn.relu(tf.matmul(x, y))
# z = my_func(x, y)

我们希望得到它的计算图。首先需要使用@tf.function修饰被监控的函数,然后使用tf.summary.trace_on()z = my_func(x, y)函数运行之前开始记录。

Trace On

tf.summary.trace_on(graph=True, profiler=True)
z = my_func(x, y)

定义日志目录名称和文件写入句柄,这些都是刻在DNA里的操作:

# Set up logging.
stamp = datetime.now().strftime("%Y%m%d-%H%M%S")
logdir = 'logs/func/%s' % stamp
writer = tf.summary.create_file_writer(logdir)

最后执行记录:

# Call only one tf.function when tracing.
with writer.as_default():
  tf.summary.trace_export(
      name="my_func_trace",
      step=0,
      profiler_outdir=logdir)
%tensorboard --logdir logs/func


notes      Tensorflow TensorBoard

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!