層型別: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,...