[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)行列を取得します。
もっと文脈を提供できますか?どこから引用しましたか? –
[リンク](https://www.tensorflow.org/get_started/mnist/beginners)の「回帰の実装」を参照してください。 – ddgg007