2017-06-04 33 views
1

我有一些非常大的张量汇总摘要。如果这些使用张量板绘制,我可以从它们下载CSV文件。从Tensorflow摘要中获取CSV

但是,绘制这些使用张量板需要很长时间。我在the docs中发现有一种方法可以直接在Python中读取摘要。这种方法是summary_iterator,可以如下使用:

import tensorflow as tf 

for e in tf.train.summary_iterator(path to events file): 
    print(e) 

我可以用这个方法来直接创建CSV文件?如果是这样,我该怎么做?这会节省很多时间。这样做会是这样的

回答

0

一种可能的方式:

from tensorflow.python.summary import event_accumulator 
import numpy as np 
import pandas as pd 
import sys 

def create_csv(inpath, outpath): 
    sg = {event_accumulator.COMPRESSED_HISTOGRAMS: 1, 
      event_accumulator.IMAGES: 1, 
      event_accumulator.AUDIO: 1, 
      event_accumulator.SCALARS: 0, 
      event_accumulator.HISTOGRAMS: 1} 
    ea = event_accumulator.EventAccumulator(inpath, size_guidance=sg) 
    ea.Reload() 
    scalar_tags = ea.Tags()['scalars'] 
    df = pd.DataFrame(columns=scalar_tags) 
    for tag in scalar_tags: 
     events = ea.Scalars(tag) 
     scalars = np.array(map(lambda x: x.value, events)) 
     df.loc[:, tag] = scalars 
    df.to_csv(outpath) 

if __name__ == '__main__': 
    args = sys.argv 
    inpath = args[1] 
    outpath = args[2] 
    create_csv(inpath, outpath) 

请注意,此代码将加载整个事件文件到内存中,所以最好在集群上运行此。有关EventAccumulator的参数sg的信息,请参阅this SO question

一个额外的改进可能不仅是存储每个标量的value,而且还存储step