我正在使用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
调试器输出:
答案 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}
我希望类似的结构用于更高级的摘要。