2017-03-06 83 views
1

我想在C++caffe(我想在android中運行它)實施deepdreamgooglenet需要輸入形狀224*224*3。在deepdream的ipython筆記本中,它顯示src.reshape(1,3,h,w)。這是否意味着只有輸入blob被重新塑造或者通過網絡傳播?我試圖調用C++net.Reshape(),它導致:Caffe ::淨重塑

F0307 01:27:24.529654 31857 inner_product_layer.cpp:64] Check failed: K_ == new_K 
(1024 vs. 319488) Input size incompatible with inner product parameters. 

不應在網絡上也重塑?如果不是,重塑輸入blob的含義是什麼?我是深入學習的新手。所以請原諒我,如果它看起來微不足道。

回答

1

改變輸入的形狀需要整形網的整形。唉,有一些圖層類型不喜歡重新塑造。具體而言,「InnerProduct」層:內部產品層的可訓練參數的數量取決於輸入形狀和輸出形狀。因此,具有「InnerProduct」層的網絡不能被重新塑造。

您可以使用"net surgery"示例中描述的方法將內積圖層轉換爲等效的卷積圖層(可以重新定形)。

+0

我應該只是重塑相關圖層嗎?在'googlenet'中,只有最後一層是內層產品,爲了深層次的目的,我只需要通過一些初始層。 – lnman

+0

@lnman你不能重塑網的一部分 – Shai

+0

我看到'Net :: Reshape()'的源代碼,它只是循環遍歷所有的圖層。爲了深層次的目的,我只轉發到特定層,並從該層向後。所以對我來說似乎是合理的。你能詳細說明爲什麼不呢? – lnman