1. 程式人生 > >Slim下的函式介紹

Slim下的函式介紹

1、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:N個正整數的序列,指定卷積核的空間維度。 可以是單個整數,則所有空間維度具有相同值。     stride:一組N個正整數,指定計算輸出的stride。 可以是一個整數,則所有空間維具有相同的值。指定任何stride!= 1與指定任何rate!= 1不相容。     padding:為padding的方式選擇,VALID或者SAME     data_format:是用於指定輸入的input的格式     rate:N個正整數的序列,指定用於萎縮卷積的擴張率。 可以是單個整數,以指定所有空間維度的相同值。 指定任何rate!= 1與指定任何stride!= 1不相容。     activation_fn:

用於啟用函式的指定,預設的為ReLU函式     normalizer_fn:用於指定正則化函式     normalizer_params:用於指定正則化函式的引數     weights_initializer:用於指定權重的初始化程式     weights_regularizer:為權重可選的正則化程式     biases_initializer:用於指定biase的初始化程式     biases_regularizer: biases可選的正則化程式     reuse:指定是否共享層或者和變數     variable_collections:指定變數的集合列表或者字典名,變數(weight、biase)會被新增到這個集合中。     outputs_collections:
指定一個集合名,輸出(output)會被新增到這個集合     trainable::卷積層的引數是否可被訓練     scope:共享變數所指的variable_scope

2、conv2d_same():使用“SAME”填充的二維卷積

  函式原型:conv2d_same(inputs, num_outputs, kernel_size, stride, rate=1, scope=None)     inputs: 一個4維tensor:[batch, height_in, width_in, channels].     num_outputs:卷積核的個數     kernel_size: 卷積核的尺寸     stride: 輸出的stride     rate: 空洞卷積膨脹率     scope: Scope.

net = conv2d_same(inputs, num_outputs, 3, stride=stride)
# 等價於
net = slim.conv2d(inputs, num_outputs, 3, stride=1, padding='SAME')
net = subsample(net, factor=stride)
# 但是和net = slim.conv2d(inputs, num_outputs, 3, stride=stride, padding='SAME')不等價,因為當輸入的高度
或寬度是偶數時,它是不同的,這就是我們添加當前函式的原因。

# subsample的原始碼為:
def subsample(inputs, factor, scope=None):
  """Subsamples the input along the spatial dimensions.
  Args:
    inputs: A `Tensor` of size [batch, height_in, width_in, channels].
    factor: The subsampling factor.
    scope: Optional variable_scope.
  Returns:
    output: A `Tensor` of size [batch, height_out, width_out, channels] with the
      input, either intact (if factor == 1) or subsampled (if factor > 1).
  """
  if factor == 1:
    return inputs
  else:
    return slim.max_pool2d(inputs, [1, 1], stride=factor, scope=scope)

3、