2017-06-29 16 views
2

私はTensorflowの初心者です。私はチュートリアルで少し混乱しています。著者は最初に数式y = softmax(Wx + b)を与えますが、PythonコードでxW + bを使用し、小さなトリックであることを説明します。私はトリックを理解していない、なぜ作者は数式を反転する必要がありますか?テンソルフローを使ったMNIST実験のトリックを理解するには?

https://www.tensorflow.org/get_started/mnist/beginners

まず、我々は、発現tf.matmul(X、W)とのWによってXを掛けます。これは の入力を持つ2Dテンソルであるxを扱う小さなテクニックとして、をWxに持っていた我々の方程式でそれらを掛けたときに反転された です。次に、bを追加し、最後にtf.nn.softmaxを適用します。

答えて

1

あなたが式からわかるように、

y=softmax(Wx + b) 

enter image description here

入力xが重変数Wを掛けたが、docに

y = tf.nn.softmax(tf.matmul(x, W) + b) 

Wれます計算の便宜のためにxを掛けたですので、Wを10 * 784〜784 * 10は、この式と一致します。

0

一般に機械学習では、テンソルフロー常に、最初のディメンションがバッチを表すようにしてください。トリックは、各行列乗算の前後にすべてをトランスポーズすることなく、そのことを保証する方法です。

xは、フィーチャの列ベクトルではなく、形状が(batch_size, n_features)の2次元行列です。

あなたがWxを続ける場合は、x形状(n_outputs, batch_size)のものであろう形状(n_outputs, n_features)W、およびWx'を使用(形状(n_features, batch_size)x'に)移調よ、あなたがある、(batch_size, n_outputs)に戻ってそれを転置する必要がありますあなたが最後に望むもの。

tf.matmul(x, W)を使用している場合、Wの形状は(n_features, n_outputs)であり、その結果はそのまま形(batch_size, n_outputs)になります。

0

これは最初は明らかではないと私は同意します。複数の入力

と2Dテンソルであること

xはtensorflowで、データは線形代数のそれではないの規則を次テンソルに保存されていることを伝えるために非常に簡潔な方法です。

特に、最も外側の次元(つまり、行列の列)は、常にサンプル次元です。つまり、サンプル数と同じサイズです。

サンプルのフィーチャを2Dテンソル(行列)に保存すると、そのフィーチャは最も内側の次元、つまり線に保存されます。つまり、テンソルxは、変数$ x $を式に入れ替えたものです。したがって、Wbです。 x.T*W.T=(W.x).Tが、線形代数方程式とそれのテンソル実装との間の乗算におけるスワップの不一致を説明しているという事実。

関連する問題