这个简单的程序
import tensorflow as tf
input = 'string'
batch = tf.train.batch([tf.constant(input)], batch_size=1)
with tf.Session() as sess:
tf.train.start_queue_runners()
output, = sess.run(batch)
print(1, input, output)
print(2, str(output, 'utf-8'))
print(3, input.split('i'))
print(4, str(output, 'utf-8').split('i'))
print(5, output.split('i'))
prints
1 串 b'string'
2 串
3 ['str', 'ng']
4 ['str', 'ng']
错误:tensorflow:QueueRunner 中出现异常:会话已关闭。
打印(5, 输出.split('i'))
类型错误:需要类似字节的对象,而不是“str”
如果输入是字符串列表,为什么结果不是字符串列表?
好的,@jdehesa解释了 https://stackoverflow.com/questions/53278261/tensorflow-batch-keep-result-as-strings/53279982?noredirect=1#comment93444348_53279982 WHY,但不是如何“修复”它。我可以申请bytes.decode()会议结果:
output, = map(bytes.decode, sess.run(batch))
并且存在tf.map_fn()这应该对张量做同样的事情。唯一的问题是我如何在我的场景中使用它?
PS:实际上,错误消息也令人费解。问题是我们提供了一个字节对象,而不是一个字符串。但是类型错误恰恰相反。
PPS:错误消息得到了解释,感谢@jdehesa:它是关于split()的参数,而不是对象。output.split(b'i')
效果很好!