将“tf.Summary”对象序列化为“string”张量

Serializing a `tf.Summary` object to `string` Tensor

我尝试生成要在 tensorboard 中显示的图像摘要。这在急切的执行环境中有效。

现在,我尝试使用 eval_metric_ops 返回操作字典来计算计算图执行期间的指标。为此,我依靠 tf.py_func 来进行指标计算和绘图。这个函数签名是

tf.py_func(
    func,
    inp,
    Tout,
    stateful=True,
    name=None
)

其中 Tout 是函数的返回类型。我设法让它适用于简单的指标(浮点值)。据我所知,我需要为我的摘要定义一个 string 返回类型,它将在 rebuild 我的图像之后被解析。

这里是阻塞点

我用以下方法构建我的摘要:

summ = tf.Summary(value=[
  tf.Summary.Value(
    tag=metric_name,
    image=tf.Summary.Image(
       encoded_image_string=encode_image_array_as_png_str(
         self._last_metrics[metric_name])))])

按原样返回,我得到:W tensorflow/core/framework/op_kernel.cc:1306] Unimplemented: Unsupported object type Summary

返回 str(summ) 得到:WARNING:tensorflow:Skipping summary for ..., cannot parse string to Summary.

我还尝试用以下方法构建它:

tf.summary.image(
    name,
    tensor,
    max_outputs=3,
    collections=None,
    family=None
)

但这给出了:W tensorflow/core/framework/op_kernel.cc:1306] Unimplemented: Unsupported object type Tensor


你知道如何将 Summary 序列化为 string/bytes iterable/whatever 可以解释为字符串 Tensor,之后可以将其解析回图像 Summary。

谢谢。

真丢人。

与 tensorflow 中的许多其他 类 一样,Summary 由 Protocol Buffer 消息定义,因此实现 SerializeToString()。 因此,只需返回 summ.SerializeToString() 即可!