簡體   English   中英

如何在 Caffe 中檢索圖層

[英]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.forwardnet.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)

用例:

我需要在 batchnorm 層中設置運行均值和 var,這不在net.paramsnet.blobs

解決方法:

net.layer_dict['bn_layer_name'].blobs[0].data運行平均值。 blobs[1]是變量。 blobs[2]設置為 1,這是一個默認為 0 的比例。 在此處輸入圖片說明

我如何找到它:

print(net.__dir__())然后猜測並嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM