在tensorflow/models/slim/nets中,這裏是vgg的相關片段的鏈接。我很好奇爲什麼slim.nets.vgg使用conv2d而不是fully_connected圖層,儘管實際上它的工作方式相同?這是爲了速度的目的嗎? 我欣賞一些解釋。謝謝!爲什麼slim.nets.vgg使用conv2d而不是fully_connected圖層?
4
A
回答
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圖層(實際上是權重)。肯定會避免轉換錯誤。
相關問題
- 1. 爲什麼conv2d輸出(?,6,1,1)而不是(?,5,1,1)
- 2. 爲什麼使用classmethod而不是staticmethod?
- 3. 爲什麼使用iconv_strpos而不是strpos?
- 4. 爲什麼使用registerDefaults:而不是setValue:forKey:?
- 5. 爲什麼使用TagBuilder而不是StringBuilder?
- 6. 爲什麼,而不是使用回調
- 7. 爲什麼使用結構,而不是
- 8. 爲什麼使用StringWriter而不是StringBuffer?
- 9. 爲什麼使用s:Line而不是mx:HRule?
- 10. 爲什麼使用ImageIcon而不是Image?
- 11. 爲什麼使用SQLiteOpenHelper而不是SQLiteDatabase?
- 12. 爲什麼使用MapFragment而不是SupportMapFragment?
- 13. 爲什麼使用FloatBuffer而不是float []?
- 14. 爲什麼使用追加()而不是+
- 15. 爲什麼使用Number.parseInt而不是parseInt()?
- 16. 爲什麼使用JLE而不是JL?
- 17. 爲什麼使用isinstance()而不是type()?
- 18. 爲什麼使用NoSQL而不是RDBMS?
- 19. 爲什麼使用uImage而不是zImage
- 20. 爲什麼使用HTML而不是HAML?
- 21. 爲什麼使用leal而不是incq?
- 22. 爲什麼使用TCPDF而不是mpdf
- 23. 爲什麼使用DataSource而不是XADataSource?
- 24. 爲什麼使用'='而不是':='?
- 25. 爲什麼使用char []而不是String?
- 26. 爲什麼使用集合而不是地圖? C++
- 27. 爲什麼我會使用白色屏幕而不是地圖?
- 28. 爲什麼Facebook使用圖片精靈而不是基礎64?
- 29. 爲什麼=而不是:?
- 30. 爲什麼使用keras Conv2D圖層時會出現錯誤?檢查時出現錯誤:
是的,這是在苗條的來源「注意:所有完全連接的圖層已被轉換爲conv2d圖層。」我想知道爲什麼太... – eggie5