『TensorFlow』slim模組常用API
輔助函式
slim.arg_scope()
slim.arg_scope可以定義一些函式的預設引數值,在scope內,我們重複用到這些函式時可以不用把所有引數都寫一遍,注意它沒有tf.variable_scope()劃分圖結構的功能,
1 2 3 4 5 6 7 8 9 10 11 12 |
trainable = True ,
= tf.truncated_normal_initializer(stddev = 0.01 ),
kernel_size = [ 3 , 3 ],
|
slim.arg_scope的用法基本都體現在上面了。一個slim.arg_scope內可以用list來同時定義多個函式的預設引數(前提是這些函式都有這些引數),另外,slim.arg_scope也允許相互巢狀。在其中呼叫的函式,可以不用重複寫一些引數(例如kernel_size=[3, 3]),但也允許覆蓋(例如最後一行,卷積核大小為[5,5])。
另外,還可以把這麼多scope封裝成函式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
slim.utils.collect_named_outputs()
將變數取個別名,並收集到collection中
1 |
|
引數意義如下,
return:這個方法會返回本次新增的tensor物件, 引數二:意義是為tensor新增一個別名,並收集進collections中 檢視原始碼可見實現如下 if collections: append_tensor_alias(outputs,alias) ops.add_to_collections(collections,outputs) return outputs 據說本方法位置已經被轉移到這裡了, from tensorflow.contrib.layers.python.layers import utils utils.collect_named_outputs()
slim.utils.convert_collection_to_dict()
1 2 3 4 5 6 |
|
層函式
batch_norm處理
slim.batch_norm()函式,以及slim的各個層函式的normalizer_fn=slim.batch_norm呼叫都會用到,
其引數很多,需要以字典的形式傳入,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
在以其他層引數的形式呼叫時如下,
1 2 |
|
注意一但使用batch_norm層,在訓練節點定義時需要新增一些語句,slim.batch_norm裡有moving_mean和moving_variance兩個量,分別表示每個批次的均值和方差。在訓練時還好理解,但在測試時,moving_mean和moving_variance的含義變了,在訓練時,
1 2 3 4 5 |
|
tf.contrib.slim.conv2d()
convolution(inputs, num_outputs, kernel_size, stride=1, padding='SAME', data_format=None, rate=1, activation_fn=nn.relu, normalizer_fn=None, normalizer_params=None, weights_initializer=initializers.xavier_initializer(), weights_regularizer=None, biases_initializer=init_ops.zeros_initializer(), biases_regularizer=None, reuse=None, variables_collections=None, outputs_collections=None, trainable=True, scope=None)inputs 是指需要做卷積的輸入影象
num_outputs 指定卷積核的個數(就是filter的個數)
kernel_size 用於指定卷積核的維度(卷積核的寬度,卷積核的高度)
stride 為卷積時在影象每一維的步長
padding 為padding的方式選擇,VALID或者SAME
data_format 是用於指定輸入的input的格式
rate 這個引數不是太理解,而且tf.nn.conv2d中也沒有,對於使用atrous convolution的膨脹率(不是太懂這個atrous convolution)
activation_fn 用於啟用函式的指定,預設的為ReLU函式
normalizer_fn 用於指定正則化函式
normalizer_params 用於指定正則化函式的引數
weights_initializer 用於指定權重的初始化程式
weights_regularizer 為權重可選的正則化程式
biases_initializer 用於指定biase的初始化程式
biases_regularizer biases可選的正則化程式
reuse 指定是否共享層或者和變數
variable_collections 指定所有變數的集合列表或者字典
outputs_collections 指定輸出被新增的集合
trainable 卷積層的引數是否可被訓練
scope 共享變數所指的variable_scope
slim.conv2d是基於tf.conv2d的進一步封裝,省去了很多引數,一般呼叫方法如下:
1 |
|
slim.max_pool2d
這個函式更簡單了,用法如下:
1 |
|
slim.fully_connected
1 |
|
前兩個引數分別為網路輸入、輸出的神經元數量。