2017-02-05 44 views
4

在tensorflow/models/slim/nets中,這裏是vgg的相關片段的鏈接。我很好奇爲什麼slim.nets.vgg使用conv2d而不是fully_connected圖層,儘管實際上它的工作方式相同?這是爲了速度的目的嗎? 我欣賞一些解釋。謝謝!爲什麼slim.nets.vgg使用conv2d而不是fully_connected圖層?

+0

是的,這是在苗條的來源「注意:所有完全連接的圖層已被轉換爲conv2d圖層。」我想知道爲什麼太... – eggie5

回答

0

過了一段時間,我認爲至少有一個原因,它可以避免重量轉換錯誤。

Tensorflow /苗條以及其他高級別庫允許張量格式或者BHWC(的batch_size,高度,寬度,通道。同下)通過默認或BCHW(爲了更好的性能)。

當這兩個格式之間的轉換的權重,權重第一FC(完全連接層,CONV層之後)的[in_channel, out_channel]不得不被重新成形爲[last_conv_channel, height, width, out_channel]例如,然後調換到[height, width, last_conv_channel, out_channel]並再次重新成形爲[in_channel, out_channel]

如果您使用的是權重而不是完全連接的權重,則此類轉換將顯式應用於fc圖層(實際上是權重)。肯定會避免轉換錯誤。

相關問題