caffe學習系列 層解讀

2021-08-10 12:09:42 字數 3213 閱讀 6547

層型別:accuracy

layer

}

可以看到,caffe中計算accuracy時,是通過比較最後乙個全連線層(神經元個數=類別數、但沒有加入activation function)的輸出和資料集的labels來得到的,計算過程在accuracylayer中實現;

我也一直非常困惑,計算accuracy應該使用計算得到的labels與資料集真正的labels去做計算,為什麼caffe的accuracy要將fc8接入accuray層呢?原來,在accuracylayer內部,實現了「利用fc8的輸出得到資料集的**labels」(數值最大的那個值得idnex就是樣本的類別),那麼,再與輸入的資料集真實lebels作對比,就實現了accuray的計算!

實際上,如果僅僅是做**,利用fc8的輸出就夠了(輸出值最大的那個位置即為輸入的label),該輸出表示了輸入的樣本屬於每一類的可能性大小,但並不是概率值; 

如果為了使輸出具有統計意義,需要加入softmax function,它只是使前面的全連線層的輸出(fc8)具有了概率意義,並不改變這些輸出之前的大小關係,因為softmax function本身就是增函式;

為了利用誤差反向傳播,還需要構造loss function(驗證和訓練的不同僅是驗證列印出accuracy值),需要利用softmax function的輸出,即需要利用輸入樣本屬於每一類的概率值;

/*下面**含全連線層,accuracy,softmaxwithloss層*/

//最後乙個全連線層

layer

# 偏置項(biases)的學習速率因子和衰減因子

param

inner_product_param

bias_filler

}}layer

}/*fc8後面接的softmaxwithloss層做的工作分2步

第一步:對fc8的輸出計算softmax function(結果為概率值)

第二步:利用求得的概率值計算loss值*/

layer

示例**見上;

層型別:innerproduct(全連線層)

輸入:n(batch_size大小)*c_i(通道數)*h*w

輸出:n*c_o*1*1

輸入可視為乙個vector,輸出也是乙個vector(height和width被設為1)

全連線層可將學習到的特徵對映到樣本空間的作用。

//分割labels例項**

layer

}

axis表明是(nchw中)哪乙個維度,slice_point(拆分點)是該維度的索引,slice_point的數量必須是top blobs的數量減1.

型別(type):concat(鏈結層)

cpu 實現: ./src/caffe/layers/concat_layer.cpp

cuda、gpu實現: ./src/caffe/layers/concat_layer.cu

引數(concat_param):(可選):

axis [default 1]: 0代表鏈結num,1代表鏈結channel

輸入(input) :

-n_i * c_i * h * w: 第i個blob的維度是n_i * c_i * h * w,共k個

輸出(output):

if axis = 0: (n_1 + n_2 + … + n_k) * c_1 * h * w, and all input c_i should be the same.(axis = 0時,輸出 blob的維度為(n_1 + n_2 + … + n_k) * c_1 * h * w,要求所有的input的channel相同)

if axis = 1: n_1 * (c_1 + c_2 + … + c_k) * h * w, and all input n_i should be the same.(axis = 0時,輸出 blob的維度為n_1 * (c_1 + c_2 + … + c_k) * h * w,要求所有的input的num相同)

作用:與slicing layer相對應,concat layer用於把多個輸入blob鏈結成乙個輸出blob。

layer

}

layer

}

eltwise層的操作有三個:product(點乘)、sum(相加減)、max(取最大值),其中,sum是預設操作。

prod表示將a、b按元素相乘,sum表示將a、b按元素求和,max表示將a、b按元素求最大值。

型別(type):reshape(對比flatten層)

cpu 實現: ./src/caffe/layers/reshape_layer.cpp

引數(reshape_param):(可選)

shape(改變後的維度,詳見下面解釋)

輸入(input):

a single blob with arbitrary dimensions(乙個任意維度的blob)

輸出(output):

the same blob, with modified dimensions, as specified by reshape_param(相同內容的blob,但維度根據reshape_param改變)

layer 

}}

其中:當reshape_param引數為: } ,那麼輸出和flattening layer的輸出是完全一樣的。

層型別:flatten

作用:用於把乙個維度為n * c * h * w的輸入轉化為乙個維度為 n * (c*h*w)的向量輸出。

關於:幾種lr_policy:

「fixed」

「inv」

「step」

「multistep」

「stepearly」

「poly」

圖形化表示參考:

9.prototxt檔案引數說明

caffe層解讀系列 hinge loss

hinge loss 主要針對要求 maximum margin 的分類問題,因此尤其適用於svm分類。hinge loss的定義如下 l y max 0,1 t cdot y 從定義可以很容易看出,當 t 和 y 符號一致 表示 y 分類正確 且 vert y vert ge 1 時hinge l...

caffe層筆記系列Loss層

1.可選引數 1 ignore label int型變數,預設為空。如果指定值,則label等於ignore label的樣本將不參與loss計算,反向傳播時梯度直接置0。2 normalize bool型變數,即loss會除以參與計算的樣本總數,否則loss等於直接求和。3 normalizati...

caffe 學習系列啟用層及其引數

在啟用層中,對輸入資料進行啟用操作 實際上就是一種函式變換 是逐元素進行運算的。從bottom得到乙個blob資料輸入,運算後,從top輸出乙個blob資料。在運算過程中,沒有改變資料的大小,即輸入和輸出的資料大小是相等的。輸入 n c h w 輸出 n c h w 常用的啟用函式有sigmoid,...