2017-02-20 5 views
0

私はテンソルフローの初心者です。私はこのtutorial codeでコーディングを練習していました。ほとんどすべてのコードがわかりましたが、いくつかの点で私は固執しました。テンソルフローで可変長次元を指定する方法が矛盾しているようです

import tensorflow as tf 
x = tf.placeholder("float", [None, n_steps, n_input]) 
x = tf.transpose(x, [1, 0, 2]) 
x = tf.reshape(x, [-1, n_input]) 

tf.placholder機能で、私はNoneで可変長dimesionを指定する必要がありました。しかし、tf.reshapeで私はではなく-1を使用しなければなりませんでした。 2つの関数のドキュメントでは、関連する引数の両方がshapeという名前です。だから私はここで失われていると感じている。彼らは本当に別の意味を持っていますか?それとも、テンソルフローの開発者の小さな設計ミスですか?

答えて

2

このように理解できます。プレースホルダでは、値「なし」は「任意の値である可能性があります」を示します。あなたの場合のように:バッチサイズは何でもかまいません。 リシェイプ機能では、-1は「このシェイプを動作させるために残っている値」を示します。あなたの場合、あなたのxは形状(バッチ* n_steps)を得ます。これは、同じデータを行列に収めるために必要なシェイプです。

興味深いメモ:プレースホルダに複数のNone値を使うことができます(バッチサイズ、画像の幅と高さを示すため)...しかし、1つの値を複数の形で使用することはできません!

+0

特に、['-1']の形は1次元に平らになります。 –