具有一个由数字组成的张量的张量(例如“ 32”,“ 45”等),我如何将其转换为一个张量,该张量的符号重复的次数与该数字指示的次数相同。
例如,如果我有一个张量[“ 2”,“ 3”,“ 0”,“ 1”],我想获得类似[“ aa”,“ aaa”,“”,“ a “]。
我已经使用numpy获得了它,但是现在我试图直接在TensorFlow中实现它,因为我没有启动会话,所以我无法寻找变量值。
我在这里分享了一段代码
import tensorflow as tf
a = tf.Variable(["2", "3", "0", "1"], dtype=tf.dtypes.string)
res = tf.strings.regex_replace(a, "([0-9]+)", r"a" * int("\\1"))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(res)) # It should show ["aa", "aaa", "", "a"]
但是int(“ \ 1”)不会返回数字,但是会返回ValueError:
ValueError:以10为底的int()无效文字:'\ 1'
答案 0 :(得分:0)
我认为您无法在TensorFlow中使用正则表达式来实现。这是您可以执行的一种方法:
import tensorflow as tf
def repeat_symbol(nums, symbol):
nums = tf.convert_to_tensor(nums)
symbol = tf.convert_to_tensor(symbol)
# Make sequence mask from numbers
mask = tf.sequence_mask(nums)
# Use sequence mask to pick either the symbol or an empty string
symbol_rep = tf.gather(tf.stack(["", symbol]), tf.cast(mask, tf.int32))
# Join result
return tf.strings.reduce_join(symbol_rep, axis=-1)
with tf.Graph().as_default(), tf.Session() as sess:
a = tf.constant(["2", "3", "0", "1"], dtype=tf.string)
# Convert strings to numbers
a_nums = tf.strings.to_number(a, out_type=tf.int32)
result = repeat_symbol(a_nums, "a")
print(sess.run(result))
# [b'aa' b'aaa' b'' b'a']