如何解码张量流摘要字符串

时间:2018-01-10 19:50:26

标签: tensorflow tensorboard

我正在使用Tensorflow 1.4中的摘要操作。我创建了一个摘要操作,可以在运行会话时获得输出。但是,我查看了摘要输出的值,它是一个字符串变量,我无法直接从中获取值。我想知道是否有任何解决方案可以将这些值提取为可读格式。感谢。

代码段:

with tf.train.MonitoredTrainingSession(
        hooks=[summary_hook, saver_hook]) as sess:

    while not sess.should_stop():
        try:
            summary, _ = sess.run([merged, train_ops])
        except tf.errors.OutOfRangeError:
            print('Finish training.')
            break

调试器输出:

enter image description here

1 个答案:

答案 0 :(得分:0)

我在我的例子中做了类似的事情。让我们用摘要定义三个节点,并将它们合并到一个摘要节点中:

_, accuracy = tf.metrics.accuracy(labels, logits)
_, precision = tf.metrics.precision(labels, logits)
_, recall = tf.metrics.recall(labels, logits)
acc_sum = tf.summary.scalar('accuracy', accuracy)
pred_sum = tf.summary.scalar('precision', precision)
rec_sum = tf.summary.scalar('recall', recall)
summary_acc_op = tf.summary.merge([acc_sum, pred_sum, rec_sum])

然后在会话中运行它:

summ_str = sess.run(summary_acc_op, feed_dict=feed_dict)

我把它保存到二进制文件中并试图找出它的结构。下面的函数构造了摘要名称和值的字典:

def summaryStringToDict(self, summ_str):
    idx = 0
    ret_dict = {}
    while idx < len(summ_str):
        item_len = struct.unpack('B', summ_str[idx+1])[0]
        name_len = struct.unpack('B', summ_str[idx+3])[0]
        name = summ_str[idx+4:idx+4+name_len]
        value = struct.unpack('<f', summ_str[idx+5+name_len:idx+9+name_len])[0]
        ret_dict[name] = value
        idx += item_len + 2
    return ret_dict

这适用于任何包含浮点数的摘要。 '<f'用于小端浮点解码。我上面函数的示例输出是:

{"accuracy_1": 0.734375, "precision_1": 1.0, "recall_1": 0.291666656733}

我希望类似的结构用于更高级的摘要。