Reputation: 14515
Simple question really but cannot seem to find a function in the TensorFlow docs or by googling.
How can I convert a tensor of type tf.int32
to one of type tf.string
?
I tried simply casting it with something like this:
x = tf.constant([1,2,3], dtype=tf.int32)
x_as_string = tf.cast(x, dtype=tf.string) # hoping for this output: [ '1', '2', '3' ]
with tf.Session() as sess:
res = sess.run(x_as_string)
but hit the error message:
Cast int32 to string is not supported
Is there a simple function somewhere in the documentation that I am missing?
UPDATE:
To clarify: I realise I could 'work around' this issue using a python function with tf.py_func
but asking if there is a solution in TensorFlow itself
Upvotes: 4
Views: 4934
Reputation: 59731
You can do that with the newly added (v1.12.0) tf.strings.format
:
import tensorflow as tf
x = tf.constant([1, 2, 3], dtype=tf.int32)
x_as_string = tf.map_fn(lambda xi: tf.strings.format('{}', xi), x, dtype=tf.string)
with tf.Session() as sess:
res = sess.run(x_as_string)
print(res)
# [b'1' b'2' b'3']
For Tensorflow v2,
import tensorflow as tf
x = tf.constant([1, 2, 3], dtype=tf.int32)
x_as_string = tf.map_fn(lambda xi: tf.strings.format('{}', xi), x, dtype=tf.string)
print(x_as_string.numpy())
# [b'1' b'2' b'3']
Upvotes: 2
Reputation: 221
tf.as_string() Converts each entry in the given tensor to strings. Supports many numeric
Upvotes: 5