web-dev-qa-db-ja.com

TensorFlow文字列:それらは何であり、どのように使用するか

_tf.read_file_でファイルを読み取ると、タイプ_tf.string_で何かを取得します。ドキュメントには、「可変長のバイト配列。Tensorの各要素はバイト配列」としか書かれていません。 ( https://www.tensorflow.org/versions/r0.10/resources/dims_types.html )。これをどう解釈するかわからない。

このタイプでは何もできません。通常のpythonでは、_my_string[:4]_のようなインデックスで要素を取得できますが、次のコードを実行するとエラーが発生します。

_import tensorflow as tf
import numpy as np

x = tf.constant("This is string")
y = x[:4]


init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
result = sess.run(y)
print result
_

それは言う

  ファイル「/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_shape.py」、621行目、assert_has_rank 
 raise ValueError( "Shape%s must have rank%d "%(self、rank))
 ValueError:Shape()must have rank 1 

また、文字列を_tf.float32_テンソルに変換できません。これは_.flo_ファイルであり、マジックヘッダー「PIEH」があります。このnumpyコードはそのようなヘッダーを数値に正常に変換します(ここの例を参照してください https://stackoverflow.com/a/28016469/474428 )が、私はテンソルフローでそれを行うことはできません。 tf.string_to_number(string, out_type=tf.float32)を試しましたが、

tensorflow.python.framework.errors.InvalidArgumentError:StringToNumberOpは文字列を正しく変換できませんでした:PIEH 

それで、文字列は何ですか?形は何ですか?少なくとも文字列の一部を取得するにはどうすればよいですか?その一部を取得できれば、「PIEH」部分をスキップできると思います。

[〜#〜] upd [〜#〜]tf.slice(string, [0], [4])も同じエラーで動作しないことを忘れました。

13
ckorzhik

スライスなどのために文字列を文字のリストとして扱うことができるPythonとは異なり、TensorFlowのtf.stringsは分割できない値です。たとえば、以下のxは、各要素が可変長文字列である形状(2,)を持つTensorです。

x = tf.constant(["This is a string", "This is another string"])

ただし、必要なものを実現するために、TensorFlowはtf.decode_raw演算子を提供します。入力としてtf.stringテンソルを受け取りますが、文字列を他のプリミティブデータ型にデコードできます。たとえば、文字列を文字のテンソルとして解釈するには、次を実行できます。

x = tf.constant("This is string")
x = tf.decode_raw(x, tf.uint8)
y = x[:4]
sess = tf.InteractiveSession()
print(y.eval())
# prints [ 84 104 105 115]
16
keveman