2016-12-06 72 views
2

我正在關注Tensorflow MNIST tutorial瞭解Tensorflow MNIST教程 - 輸入是列矩陣還是列矩陣數組?

通過理論/直覺部分的閱讀,我開始理解x,輸入,作爲列矩陣。

事實上,描述softmax時,x被示出爲列矩陣:

softmax intuition, with x clearly being shown as a column matrix

然而,在tensorflow聲明中,x是這樣的:

x = tf.placeholder(tf.float32, [None, 784]) 

我讀這一個x是可變長度的數組(無),該數組的每個元素是大小爲784的列矩陣。

即使x被聲明爲列矩陣的陣列,它被用作如果這只是一個列矩陣:

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

在該示例中,Wb被intuitivly聲明,作爲形狀[784, 10]的變量和[10] respectivly,這是有道理的。

我的問題是:

  1. 不Tensorflow自動爲X每一列矩陣執行操作添加Softmax?

  2. 我是否正確假設[None,value]意味着,intuitivly,一個可變大小的數組,每個元素都是大小數組的數組?或者[無,值]也可能意味着只是一個大小值的數組? (沒有它在容器陣列中)

  3. 鏈接理論描述的正確方法是什麼?其中x是列向量與實現的關係,其中x是列矩陣的數組?

感謝您的幫助!

+0

一個讓我困惑的日子!在答案中添加了我的解釋 – martianwars

回答

4

直覺是針對單個輸入樣本的(這就是爲什麼您會看到列向量)。然而在實踐中,使用由多個輸入樣本組成的小批量來完成訓練。 (取決於batch_size)。

x = tf.placeholder(tf.float32, [None, 784]) 

這條線使尺寸? x 784其中?將表示批量大小的矩陣。在某種意義上列向量已經成爲這個新矩陣的行。

由於我們已將列向量轉換爲行,因此我們交換xW的乘法順序。這就是爲什麼你的W的維數爲784 x 10b的維數爲10,它將應用於所有元素。 第一次乘法之後,x*W的維數爲? x 10。 的每行添加相同的元素b。所以如果我的第一行x*W[1,2,3,4,5,6,7,8,9,0]b[1,1,1,1,1,1,1,1,1,1],結果的第一行將是[2,3,4,5,6,7,8,9,10,1]。如果您發現很難理解,請嘗試轉置W*x

來到你的問題,

不Tensorflow自動爲X每一列矩陣執行操作添加Softmax?

是的,在你的上下文中。 TensorFlow在尺寸爲1的所有元素上應用softmax(上面解釋的所有行)。所以你的結果softmax結果也將有尺寸? x 10

我是否正確假設[None,value]意味着,intuitivly,一個可變大小的數組,每個元素都是大小數組的數組?或者[無,值]也可能意味着只是一個大小值的數組? (沒有它在容器陣列中)

是的,前者是正確的解釋。另請看我上面的?矩陣類比。

鏈接理論描述的正確方法是什麼?其中x是列向量與實現的關係,其中x是列矩陣的數組?

我個人將此解釋爲W*x的轉置。詳細說明,讓x爲列向量的數目,[x1 x2 x3 x4 x5 ...]具有維數784 x ?,其中?是批量大小。假設W的維數爲10 x 784。如果在每列上應用W,則將獲得[W*x1 W*x2 W*x3...]或維數10的列向量數,得出淨矩陣維10 x ?

取代整個操作的轉置,trans(W*x) = trans(x)*trans(W),它們是代碼中的xW

+1

非常感謝您的詳細解答!我會像你說的那樣檢查矩陣轉置。它對行有意義。我想這也與輸出看起來有關,即每個類別的概率矩陣。 – mayk93

+0

我希望它對你有所幫助。如果有什麼不明之處,請在這裏評論,如果有幫助,請不要忘記接受這個正確的答案 – martianwars

+0

謝謝!是的,它現在確實有道理。我再次經歷這個問題的原因是,我想對所發生的事情有一個非常堅實的直覺,以便我可以調整模型。我想改變模型以使用實際的28x28矩陣而不是壓縮矢量。我仍不確定這將如何改變權重和偏見的外觀。你有什麼建議嗎?基本上,我想改變模型來加權比28x28矩陣的邊緣更小的中心。 – mayk93