【问题标题】:TensorFlow eval inbetween two queues两个队列之间的 TensorFlow eval
【发布时间】:2017-04-28 19:23:26
【问题描述】:

我的目标如下:

1)。使用 tf.train.string_input_producer 和 tf.TextLineReader 从文件中读取行。

2)。将包含文件行的生成张量转换为普通字符串,使用 eval 进行预处理在批处理之前(TensorFlow 的有限字符串操作不足以满足我的目的)

3)。将这些预处理的字符串转换回张量(大概使用 tf.constant ?)

4)。对结果张量使用 tf.train.batch。

以下代码是我正在处理的代码的简化版本。

“批处理后”打印语句被执行,REPL 挂在带有最终 eval 的打印语句上。

从我的阅读中,我有一种感觉是因为

threads = tf.train.start_queue_runners(coord = coord, sess = sess)

需要在调用 tf.train.batch 之后运行。但是如果我这样做,那么 REPL 当然会挂在第一个 eval 上

evalue = value.eval(session = sess)

需要进行预处理。

在张量和队列之间的值之间来回转换的最佳方法是什么? (我真的希望我可以在不事先预处理我的数据文件的情况下做到这一点。)

import tensorflow as tf
import os

def process(string):
    return string.upper()

def main():

    sess = tf.Session()

    filenames = tf.constant(["test_data/" + f for f in os.listdir("./test_data")])

    filename_queue = tf.train.string_input_producer(filenames)
    file_reader = tf.TextLineReader()
    key, value = file_reader.read(filename_queue)

    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord = coord, sess = sess)

    evalue = value.eval(session = sess)
    proc_value = process(evalue)
    tensor_value = tf.constant(proc_value)

    batch = tf.train.batch([tensor_value], batch_size = 2, capacity = 2)

    print "After batch."
    print batch.eval(session = sess)

【问题讨论】:

  • 不是您正在寻找的答案,但我建议不要使用查询运行器来读取您的文件。您正在进出 TensorFlow,这会干扰数据流,在 TensorFlow 中读取文本文件并不比 out 更快,并且可以在后处理之后或在普通 python 中完成洗牌和批处理。只需在纯 python 中读取文件并将结果行直接输入模型占位符或批处理输入管道
  • 谢谢,@MadWombat。

标签: tensorflow queue eval


【解决方案1】:

我们讨论了一种略有不同的方法,我认为它可以满足您的需要:

Converting TensorFlow tutorial to work with my own data

不确定您正在阅读什么文件格式,但上面的示例逐行读取 CSV 并将它们打包成随机批次。

如果您正在从 CSV 读取,那么简而言之,我认为您可能想要做的不是立即从 file_reader.read(filename_queue) 返回 value,而是可以尝试先进行一些预处理,然后而是返回 THAT,如下所示:

rDefaults = [['a'] for row in range((ROW_LENGTH))]
_, value = reader.read(filename_queue)
whole_row = tf.decode_csv(value, record_defaults=rDefaults)
cell1 = tf.slice(whole_row, [0], [1]) # one specific cell that contains a string
cell2 = tf.slice(whole_row, [1], [2]) # another cell that contains a string
# do some processing on cell1 and cell2
return cell1, cell2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多