我试图执行与tf.decode_raw相反的操作。
一个例子将给出一个dtype = tf.float32的张量,我想有一个函数encode_raw()接受一个浮动张量并返回一个类型为字符串的Tensor。
这很有用,因为我可以使用tf.write_file来编写文件。
有没有人知道如何使用现有函数在Tensorflow中创建这样的函数?
答案 0 :(得分:3)
我建议将数字用tf.as_string
作为文字。但是,如果你真的想把它们写成二进制字符串,那么结果是可能的:
import tensorflow as tf
with tf.Graph().as_default():
character_lookup = tf.constant([chr(i) for i in range(256)])
starting_dtype = tf.float32
starting_tensor = tf.random_normal(shape=[10, 10], stddev=1e5,
dtype=starting_dtype)
as_string = tf.reduce_join(
tf.gather(character_lookup,
tf.cast(tf.bitcast(starting_tensor, tf.uint8), tf.int32)))
back_to_tensor = tf.reshape(tf.decode_raw(as_string, starting_dtype),
[10, 10]) # Shape information is lost
with tf.Session() as session:
before, after = session.run([starting_tensor, back_to_tensor])
print(before - after)
这对我来说打印出一个全零的数组。
答案 1 :(得分:2)
对于那些使用Python 3的人:
chr()在Python 3中有不同的行为,它改变了使用前一个答案的代码获得的字节输出。 替换此代码行
character_lookup = tf.constant([chr(i) for i in range(256)])
与
character_lookup = tf.constant([i.tobytes() for i in np.arange(256, dtype=np.uint8)])
解决了这个问题。