[英]How to retrieve a layer in Caffe
給定一個caffe.Net
對象,訪問特定層的最佳方式是什么?
現在我只知道如何迭代它們,這不是很有用:
for i in range(n_layers):
print net.layers[i].type
您可以通過以下方式獲取所有圖層的名稱
all_names = [n for n in net._layer_names]
當然,如果你想檢查學習參數的值,你可以在這個網絡手術示例中看到它是如何完成的。
例如,如果您想檢查conv1
層的過濾器(假設您的模型中有一個具有該名稱的層),您可以訪問
In [1]: net.params['conv1'][0].data.shape
Out[1]: (64, 3, 3, 3)
而這一層的偏置項
In [2]: net.params['conv1'][1].data.shape
Out[2]: (64,)
如您所見,這是圖像處理網絡的第一層,它有 64 個過濾器,作用於 BGR(3 通道)輸入的 3x3 塊。
如果您已經通過網絡饋送數據(使用net.forward
或net.backward
),您可以檢查不同層對通過網絡饋送的特定輸入的響應:
In [3]: net.blobs['conv1'].data.shape
Out[3]: (1, 64, 198, 198)
conv1
層的輸出形狀為 198x198 像素,64 個通道(該層有 64 個過濾器),batch size 為 1。
如果您也執行了向后傳遞,您還可以檢查在該層計算的梯度:
In [4]: net.blobs['conv1'].diff.shape
Out[4]: (1, 64, 198, 198)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.