2017-08-06 75 views
1

爲ML初學者對MNIST的教程,在Implementing the Regression,展示如何使提及了一招在同一行迴歸,其次是解釋(重點煤礦):MNIST tensorflow教程是什麼意思與matmul翻轉技巧?

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

第一,我們乘以W乘以表達式tf.matmul(x, W)。當我們將它們乘以我們的Wx公式時,我們將其翻轉爲小技巧來處理x是具有多個輸入的2D張量。

這裏有什麼竅門,我們爲什麼要使用它?

+0

你能提供更多的上下文嗎?你從哪裏引用? –

+0

[link](https://www.tensorflow.org/get_started/mnist/beginners)在「落實迴歸」下。 – ddgg007

回答

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

好吧,我認爲主要的一點是,如果你在分批培養(即列車設置在一次訓練的幾個實例),TensorFlow總是假定x的第零維表示每批事件的數量。

假設您想要將維度M的訓練實例映射到維度N的目標實例。您通常可以通過將x(列向量)與NxM矩陣相乘來實現此目的(並且可選地添加維度N(也是列向量)),即

y = W * x + b,其中y也是列向量。

從線性代數的角度看,這是完全正確的。但是現在批量訓練已經開始了,即一次訓練了幾個訓練實例。 爲了理解這點,不要將x(和y)看作維度M(和N)的向量,而是將維度看作Mx1(和Nx1)的矩陣。 由於TensorFlow假定組成批次的不同訓練實例沿着第零維對齊,所以我們在這裏陷入困境,因爲第零維由一個單一實例的不同元素佔據。 訣竅是然後以調換上述等式(記得產品的該換位也切換所述兩個轉置對象的順序):

Y 1 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是批量大小)。將有希望自動廣播到這個事件數量(這意味着維度矩陣(AxN))。如果然後使用

Y 1 T = X^T * w^T + B^T,

你會得到一個目標的一個(AXN)矩陣批次的每個元素。