Tensorflow 性能:tf.read_文件(文件名)与tf.WholeFileReader()的比较

Tensorflow 性能:tf.read_文件(文件名)与tf.WholeFileReader()的比较,tensorflow,Tensorflow,tf.read_file(filename)与tf.WholeFileReader()之间的性能(在预取的意义上)是否存在差异 例如,这两个代码示例之间的性能是否存在差异: def example_read_file(): filename_list = tf.convert_to_tensor([["file1_1", "file1_2", "file1_3"], ["file2_1", "file2_2", "file2_3"]]) filename_queue = tf.t

tf.read_file(filename)
tf.WholeFileReader()之间的性能(在预取的意义上)是否存在差异

例如,这两个代码示例之间的性能是否存在差异:

def example_read_file():
    filename_list = tf.convert_to_tensor([["file1_1", "file1_2", "file1_3"], ["file2_1", "file2_2", "file2_3"]])
    filename_queue = tf.train.slice_input_producer(filename_list)

    f0 = tf.read_file(filename_queue[0])
    f1 = tf.read_file(filename_queue[1])
    f2 = tf.read_file(filename_queue[2])

    loss = calculate_loss(f0, f1, f2)
    with tf.Session() as sess:
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord)

        for i in range(0, 10):
            print(sess.run([loss]))

        coord.request_stop()
        coord.join(threads)

def example_WholeFileReader():
    filename_list = tf.convert_to_tensor([["file1_1", "file1_2", "file1_3"], ["file2_1", "file2_2", "file2_3"]])
    fn0, fn1, fn2 = tf.split(1, 3, filename_list)

    # queues
    fq0 = tf.train.string_input_producer(tf.reshape(fn0, [-1]), shuffle=False)
    fq1 = tf.train.string_input_producer(tf.reshape(fn1, [-1]), shuffle=False)
    fq2 = tf.train.string_input_producer(tf.reshape(fn2, [-1]), shuffle=False)

    # read files
    r0 = tf.WholeFileReader()
    k0, v0 = r0.read(fq0)
    r1 = tf.WholeFileReader()
    k1, v1 = r1.read(fq1)
    r2 = tf.WholeFileReader()
    k2, v2 = r2.read(fq2)

    loss = calculate_loss(v0, v1, v2)
    with tf.Session() as sess:
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord)

        for i in range(0, 10):
            print(sess.run([loss]))

        coord.request_stop()
        coord.join(threads)

提前谢谢

我看不到它们中任何一个的数据预取。要异步读取文件,需要设置预取队列。批处理函数已经为您完成了这项工作,即
f0\uf1\uf2=tf.train.Batch([f0,f1,f2])
将在队列运行程序启动时异步将文件内容加载到队列中,新的张量
f0\uf1\uf2\ucode>从该队列中提取内容hi Yaroslav,非常感谢您的快速响应和洞察力!因此,如果我使用带有
tf.batch
-函数的example
example\u read\u file
,数据将异步获取。但可能只有一个线程读取所有文件?批处理中有
num_threads
参数,因此读取将使用那么多线程完成。。
read_file
WholeFileReader
之间的区别在于前者使用
ReadFile
op,后者使用
io_ops.cc
中定义的
WholeFileReaderV2
op。不确定它们之间是否有任何性能差异,但
WholeFileReaderV2
是新的完美!谢谢!我看不到它们中任何一个的数据预取。要异步读取文件,需要设置预取队列。批处理函数已经为您完成了这项工作,即
f0\uf1\uf2=tf.train.Batch([f0,f1,f2])
将在队列运行程序启动时异步将文件内容加载到队列中,新的张量
f0\uf1\uf2\ucode>从该队列中提取内容hi Yaroslav,非常感谢您的快速响应和洞察力!因此,如果我使用带有
tf.batch
-函数的example
example\u read\u file
,数据将异步获取。但可能只有一个线程读取所有文件?批处理中有
num_threads
参数,因此读取将使用那么多线程完成。。
read_file
WholeFileReader
之间的区别在于前者使用
ReadFile
op,后者使用
io_ops.cc
中定义的
WholeFileReaderV2
op。不确定它们之间是否有任何性能差异,但
WholeFileReaderV2
是新的完美!谢谢!