2017-06-15 33 views
2

我跟隨udacity MNIST tutorial和MNIST數據原本是28*28矩陣。然而,在餵養該數據之前,他們將數據平整爲具有784列(784 = 28 * 28)的1d陣列。例如, 原始訓練集形狀爲(200000,28,28)。
200000行(數據)。每個數據是28 * 28矩陣爲什麼我們在將數據輸入張量流之前將數據變平?

它們轉換成訓練集,其形狀是這樣的(200000 784)

有人能解釋爲什麼它們拼合出的數據輸送到tensorflow過嗎?

+1

你的鏈接始於localhost,你應該修復這個問題 – gdelab

+0

謝謝。現在修好。 – Aaron

+1

在將它發送到張量流之前,您不必將其弄平。你可以在Tensorflow中將它弄平。 – Wontonimo

回答

4

因爲當你添加一個完全連接的圖層時,你總是希望你的數據是一個(1或)2維矩陣,其中每一行都是表示數據的向量。這樣,完全連接的層只是輸入(大小爲(batch_size, n_features))和權重(形狀爲(n_features, n_outputs))(加上偏差和激活函數)之間的矩陣乘法,並且您將得到形狀(batch_size, n_outputs)的輸出。另外,您完全不需要完全連接圖層中的原始形狀信息,因此可以丟失它。

如果沒有首先重塑,得到相同的結果會更加複雜和效率更低,這就是爲什麼我們總是在完全連接的層之前做到這一點。對於卷積圖層,相反,您需要保持原始格式(寬度,高度)的數據。

+0

卷積網絡上的良好通話。 – Wontonimo

2

這是一個具有完全連接層的約定。完全連接的層將前一層中的每個節點與連續層中的每個節點連接起來,因此局部性對於這種類型的層不是問題。

此外,通過定義像這樣的圖層,我們可以通過計算公式:f(Wx + b) = y高效地計算下一步。這對於多維輸入來說並不是那麼容易實現,並且重塑輸入是低成本且容易完成的。

相關問題