2017-02-27 17 views
1

TensorFlowを初めて使用しましたが、このプレースホルダ宣言に関する質問が残っています。プレースホルダxを次のように定義することの違いはどういう意味ですか。TensorFlowプレースホルダの寸法 - 違いは何ですか?

x = tf.placeholder(tf.float32, [None, seq_size]) 

これとは対照的に、

x = tf.placeholder(tf.float32, [None, seq_size, 1]) 

私は行列の点で考えています。つまり、変数xに10個の値が与えられ、seq_sizeが3であるとします。最初のものは10x3で、後のものは10x3x1です。なぜテンソル流がそれらを異なって考えるのでしょうか?

答えて

2

Tensorflowは形状検証の目的で異なって考えます。 たとえば、サイズが3x4の行列を使用する行列乗算は、次元1と3が一致しないため、2番目のバージョンでは実行できません。 Tensorflowはグラフ作成時にそれを検出できます。

また、コードの可読性の面では、このディメンションが将来変更される可能性がある場合、余分なディメンション1を持つことが一般的な理解には良い場合があります。例えば、あなたのデータポイントは、すべてのコードは既にこの余分を持っているとして、それが簡単に

x = tf.placeholder(tf.float32, [None, seq_size, d]) 

での寸法d>1と多変量時系列にあなたの結果を拡張するようになります

x = tf.placeholder(tf.float32, [None, seq_size, 1]) 

を使用して、単変量時系列であれば次元が占める。

+0

ありがとうThomas、すべてクリア – beginner

0
x = tf.placeholder(tf.float32, [None, seq_size, 1]) 

ここで、 'x'はテンソルのサイズ[anything、seq_size、1]を保持するためのプレースホルダです。これは、いくつかの多次元演算を高次元の行列にアップケーシングすることによって容易に実行できる行列演算で有効です。

P.S:形状の配列中の要素数[なし、seq_size] & [None、seq_size、1]は同じにすることができます。彼らは簡単に互いを再構成することができます。

関連する問題