TensorFlowとKerasのsymbolic tensorsとは何ですか?それらは他のテンソルとどう違うのですか?なぜ彼らは存在するのですか? TensorFlowとKerasのどこに登場しますか?それらにどのように対処すべきか、またはそれらに対処するときにどのような問題に直面する可能性がありますか?
以前は、_SymbolicException
などの記号テンソルに関連する特定の問題に直面していましたが、ドキュメントにはこの概念が記載されていません。 別の投稿 もあり、この質問も尋ねられますが、この投稿では、この特定の質問に焦点を当てているので、回答を後で参照として使用できます。
blog.tensorflow.org によると、シンボリックテンソルは、特に値を保持しないという点で他のテンソルとは異なります。
簡単な例を考えてみましょう。
>>> a = tf.Variable(5, name="a")
>>> b = tf.Variable(7, name="b")
>>> c = (b**2 - a**3)**5
>>> print(c)
出力は次のとおりです。
tf.Tensor(1759441920, shape=(), dtype=int32)
上記の場合、値はtf.Variable形式で具体的に定義され、出力はTensor形式です。ただし、テンソルは、そのように見なされるために値を含んでいる必要があります。
シンボリックテンソルは、テンソルを定義するために明示的な値が必要ないという点で異なり、これは、デフォルトのAPIとしてKerasを使用するTensorFlow 2.0でニューラルネットワークを構築するという点で影響があります。
ホテルのキャンセル発生率を予測するための分類モデルを構築するために使用されるシーケンシャルニューラルネットワークの例を次に示します(Jupyter Notebookの全文 こちら 興味がある場合):
from tensorflow.keras import models
from tensorflow.keras import layers
model = models.Sequential()
model.add(layers.Dense(8, activation='relu', input_shape=(4,)))
model.add(layers.Dense(1, activation='sigmoid'))
これは、ネットワークで明示的に定義されている値がないため、シンボリックに定義されたモデルです。むしろ、ネットワークによって読み取られる入力変数用のフレームワークが作成され、予測が生成されます。
この点で、Kerasは、シンボリックテンソルを使用してグラフを作成すると同時に、必須のレイアウトを維持できることを考えると、非常に人気があります。