2017-08-06 9 views
1

ML初心者のためMNISTのチュートリアルは、Implementing the Regressionで、トリック(強調鉱山)の使用に言及して説明続いて、単一の行に回帰を作成する方法を示していますマットムフリップトリックで、MNISTテンソルフローチュートリアルは何を意味しますか?

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

ファーストxにWを掛けて式tf.matmul(x, W)を乗じます。これは、xxを複数の入力を持つ2Dテンソルとして扱うために、の小さなトリックとして、Wxを持っていた方程式でそれらを掛けたときに反転されます。

ここでのトリックとは何ですか、なぜそれを使用していますか?

+0

もっと文脈を提供できますか?どこから引用しましたか? –

+0

[リンク](https://www.tensorflow.org/get_started/mnist/beginners)の「回帰の実装」を参照してください。 – ddgg007

答えて

1

ここではトリックはありません。そのラインは、基本的には、1つの前の方程式の乗算順に

# Here the order of W and x, this equation for single example 
y = Wx +b 
# if you want to use batch of examples you need the change the order of multiplication; instead of using another transpose op 
y = xW +b 
# hence 
y = tf.matmul(x, W) 
+0

申し訳ありませんが、これは本当に初めてのことですが、例のバッチを使用する際に順序を逆にする必要がある理由を説明できますか?または、私がもっと学ぶことができる場所を教えてください。 – ddgg007

1

[OK]を指して、私は、主なポイントは、あなたが(一度にトレーニングセットの複数のインスタンスで、すなわち電車)をバッチで訓練した場合、TensorFlowが常にあることを前提としていることだと思いますxの0次元は、バッチあたりのイベントの数を示します。

ディメンションMのトレーニングインスタンスをディメンションNのターゲットインスタンスにマップするとします。これは、通常、x(列ベクトル)にNxM行列を掛けて行います(オプションで、dimension N(列ベクトル))、すなわち

y = W * x + b(yは列ベクトルでもあります)。

これは、線形代数の観点から完全に正しいです。しかし、今やバッチでのトレーニング、すなわちいくつかのトレーニングインスタンスを一度に訓練することのポイントが来る。 これを理解するには、x(およびy)を次元M(およびN)のベクトルとして表示するのではなく、次元Mx1(およびyについてNx1)の行列として表示すると便利です。 TensorFlowでは、バッチを構成するさまざまなトレーニングインスタンスがゼロ次元に沿って配置されていることを前提としているため、ゼロ次元が1つのインスタンスの異なる要素によって占有されるため、ここで問題になります。 トリックは、上記式(製品の転置は、2つの転置オブジェクトの順序を切り替えることを覚えておく)転置することである。

Y^T = X^T * W^T + B^T

これはチュートリアルの中で簡単に説明した内容です。 ここで、y^Tは次元1xNの行列(事実上は行ベクトル)であり、x^Tは次元1xM(行ベクトル)の行列であることに注意してください。 W^Tは、次元M×Nの行列である。このチュートリアルでは、x^Tまたはy^Tを記述しませんでしたが、この転置式に従ってプレースホルダを定義しました。私には分かりませんが、なぜ彼らはbを "転置された方法"と定義していないのですか?私は+オペレータが正しい寸法を得るために必要ならば、bを自動的に転置すると仮定します。

残りの部分は非常に簡単です:1インスタンスよりも大きなバッチがある場合は、x(1xM)の行列の複数、たとえば次元の行列(AxM)(Aはバッチサイズ)。 bは、この数のイベント(次元の行列(AxN)を意味します)に自動的にブロードキャストされます。あなたはその後、

Y^T = X^T * W^T + B^T、

を使用する場合は、バッチの各要素の目標の(AXN)行列を取得します。

関連する問題