2017-09-28 8 views
1

私は何か明白なものが欠けていると確信していますが、テンソルフローの1次元テンソル文字列テンソルに参加できませんか? string_join操作は、テンソルのリストを取り、私はリストにテンソルを変換する方法を見つけることができません。テンソルでテンソルの文字列テンソルを結合するにはどうすればよいですか?

>>> x = tf.string_join(['a', 'b'], '') 
>>> sess.run(x) 
b'ab' 
>>> x = tf.string_join(tf.constant(['a', 'b']), '') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/digitalroots/anaconda2/envs/dl/lib/python3.6/site-packages/tensorflow/python/ops/gen_string_ops.py", line 164, in string_join 
    separator=separator, name=name) 
    File "/home/digitalroots/anaconda2/envs/dl/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 406, in apply_op 
    (input_name, op_type_name, values)) 
TypeError: Expected list for 'inputs' argument to 'StringJoin' Op, not Tensor("Const:0", shape=(2,), dtype=string). 

答えて

2

tf.string_join関数は、入力が反復可能であることを期待するので、あなたが分割することができテンソルを最初に個々の要素に変換します。

num_or_size_splits属性は、tf.split()から返されるテンソルの数を定義します。

value = tf.constant(['a','b']) 
split = tf.split(value, num_or_size_splits = value.shape[0], axis = 0) 
string = tf.string_join(split) 
+0

これは限り[値]は、プレースホルダはありませんが、それであれば、あなたは 'tf.shape(値を使用する必要があるとして動作します)[0] 'dtype int型のテンソルですが、' int32'型ではないので、 'tf.split()'では使用できません。 – src

1

簡単な方法は、reduce_joinを使用することができます

>>> value = tf.constant(['a','b']) 
>>> x = tf.reduce_join(value) 
>>> sess.run(x) 
b'ab' 
関連する問題