【发布时间】: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