Keras深度神經網絡模型分層分析【輸入層、卷積層、池化層】


一.輸入層

  1.用途

    構建深度神經網絡輸入層,確定輸入數據的類型和樣式。

  2.應用代碼

    input_data = Input(name='the_input', shape=(1600, 200, 1))

  3.源碼

def Input(shape=None, batch_shape=None,
          name=None, dtype=None, sparse=False,
          tensor=None):

    if not batch_shape and tensor is None:
        assert shape is not None, ('Please provide to Input either a `shape`'
                                   ' or a `batch_shape` argument. Note that '
                                   '`shape` does not include the batch '
                                   'dimension.')
    if shape is not None and not batch_shape:
        batch_shape = (None,) + tuple(shape)
    if not dtype:
        dtype = K.floatx()
    input_layer = InputLayer(batch_input_shape=batch_shape,
                             name=name, dtype=dtype,
                             sparse=sparse,
                             input_tensor=tensor)
    # Return tensor including _keras_shape and _keras_history.
    # Note that in this case train_output and test_output are the same pointer.
    outputs = input_layer.inbound_nodes[0].output_tensors
    if len(outputs) == 1:
        return outputs[0]
    else:
        return outputs

  4.參數解析

    1.shape:一個形狀元組(整數),不包括批處理大小。 例如,shape =(32,)表示預期的輸入將是32維向量的批次。

    2.batch_shape:一個形狀元組(整數),包括批處理大小。 例如,“ batch_shape =(10,32)”表示預期的輸入將是10個32維向量的批次。

       “ batch_shape =(None,32)”表示任意數量的32維向量的批次。

    3.name:圖層的可選名稱字符串。 在模型中應該是唯一的(不要重復使用同一名稱)。如果未提供,它將自動生成。

    4.dtype:輸入期望的數據類型,為字符串,例如:`float32`,`float64`,`int32` ...

    5.sparse:一個布爾值,指定要創建的占位符是否稀疏。

    6.tensor:可選的現有張量以包裝到“ Input”層中。 如果設置,則該圖層將不會創建占位符張量。

二.卷積層

  1.用途

    該層創建一個卷積核,該卷積核與該層輸入進行卷積以產生輸出張量。如果"use_bias"為True,則創建偏差矢量並將其添加到輸出中。最后,如果"activation"不是None,它也將應用於輸出。當將此層作為模型的第一層時,要提供關鍵詞參數"input_shape"【整數元組,不包括樣本軸】,例如:當data_format="channels_last"時,128*128RGB三通道的圖片的input_shape=(128, 128, 3)。

  2.種類

    1.Conv1D

    2.Conv2D

    3.SeparableConv2D

    4.Conv2DTranspose

    5.Conv3D

    6.Cropping1D

    7.Cropping2D

    8.Cropping3D

    9.UpSampling1D

    10.UpSampling2D

    11.UpSampling3D

    12.ZeroPadding1D

    13.ZeroPadding2D

    14.ZeroPadding3D

  3.默認配置 

    1.時域卷積【一維卷積】

      Conv1D(filters, kernel_size, strides=1, padding='valid', dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

      該層將輸入信號與卷積核按照單一的空域【時域】方向進行卷積。如果use_bias=True,則還會加上一個偏置項,若activation不為None,則輸出為經過激活函數的輸出。

      輸入數據類型:形如(samples, steps, input_dim)的2D張量。

      輸出數據類型:形如(samples, new_steps, nb_filter)的3D張量。因為有向量填充的原因,steps的值會發生變化。

  4.應用代碼【以Conv2D為例】

 

    Conv2D(64, kernel_size=(3, 3), strides=(1, 1), padding='same', input_shape=(28, 28, 1), activation='relu')

  5.源碼【以Conv2D為例】

class Conv2D(_Conv):

    @interfaces.legacy_conv2d_support
    def __init__(self, filters,
                 kernel_size,
                 strides=(1, 1),
                 padding='valid',
                 data_format=None,
                 dilation_rate=(1, 1),
                 activation=None,
                 use_bias=True,
                 kernel_initializer='glorot_uniform',
                 bias_initializer='zeros',
                 kernel_regularizer=None,
                 bias_regularizer=None,
                 activity_regularizer=None,
                 kernel_constraint=None,
                 bias_constraint=None,
                 **kwargs):
        super(Conv2D, self).__init__(
            rank=2,
            filters=filters,
            kernel_size=kernel_size,
            strides=strides,
            padding=padding,
            data_format=data_format,
            dilation_rate=dilation_rate,
            activation=activation,
            use_bias=use_bias,
            kernel_initializer=kernel_initializer,
            bias_initializer=bias_initializer,
            kernel_regularizer=kernel_regularizer,
            bias_regularizer=bias_regularizer,
            activity_regularizer=activity_regularizer,
            kernel_constraint=kernel_constraint,
            bias_constraint=bias_constraint,
            **kwargs)
        self.input_spec = InputSpec(ndim=4)

    def get_config(self):
        config = super(Conv2D, self).get_config()
        config.pop('rank')
        return config

  6.參數解析

    1.filters:過濾器,整數,輸出空間的維數【即卷積中過濾器輸出的數量】。

    2.kernel_size:卷積核大小,1個整數或2個整數構成的元組或列表,指定2D卷積窗口的寬度和高度。可以只指定一個一個,表示所有尺寸指定相同的值。

    3.strides:步長,1個整數或2個整數構成的元組或列表,指定沿寬度和高度的卷積步幅長度。可以只指定一個一個,表示所有尺寸指定相同的值。指定步長!=1與指定擴張率【下面解釋】!=1不兼容。

    4.padding:填充,包括"valid"和"same"。

    5.data_format:數據格式,一個字符串,"channels_last"【默認】或"channels_first"之一。輸入中尺寸的順序。"channels_last"對應形狀為(批,高度,寬度,通道)的輸入樣式,而"channels_first"對應形狀為(批,通道,高度,寬度)的輸入樣式。它默認在Keras配置文件中的~/.keras/keras.json中指定的image_data_format值。如果未指定,默認為"channels_last"。

    6.dilation_rate:一個整數或兩個整數構成的元組或列表,指定用於擴張卷積的擴張率。可以是單個整數,表示所有尺寸指定相同的值。目前,指定步長!=1與指定擴張率!=1不兼容。

    7.activation:激活函數,若未指定,則不使用任何激活函數【即線性激活:a(x) = x】。

    8.use_bias:布爾值,圖層是否使用偏差矢量。

    9.kernel_initializer:內核權重矩陣的初始化程序。

    10.bias_initializer:偏差向量的初始化程序。

    11.kernel_regularizer:正則化函數應用於內核權重矩陣。

    12.bias_regularizer:正則化函數應用於偏差向量。  

    13.activity_regularizer:正則化函數應用於圖層額輸出。

    14.kernel_constraint:約束函數應用於內核矩陣。

    15.bias_constaint:約束函數應用於偏差向量。

三.池化層

  1.用途

    所謂池化,存在兩種池化方式,分別是均值池化和最大池化。在指定窗口大小時,均值池化指取窗口數據的平均值來代替窗口數據的方式來實現數據縮放,窗口越大,縮放比例越大。最大池化的原理與均值池化類似,只是取窗口數據中的最大值來代替窗口數據,因此,相比較均值池化,最大池化的結果更加突出,也更加常用。

  2.種類

    1.最大池化

      a.MaxPooling1D

      b.MaxPooling2D 為空域信號施加最大池化,應用於二維數據處理。例如:手寫數字識別。

      c.MaxPooling3D 

    2.均值池化

      a.AveragePooling1D

      b.AveragePooling2D

      c.AveragePooling3D

    3.全局最大池化

        a.GlobalMaxPooling1D

      b.GlobalMaxPooling2D

    4.全局均值池化

      a.GlobalAveragePooling1D

      b.GlobalAveragePooling2D

  3.應用代碼

    MaxPooling1D(pool_size=2, strides=None, padding='valid')

    MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)

    MaxPooling3D(pool_size=(2, 2, 2), strides=None, padding='valid', data_format=None)

    AveragePooling1D(pool_size=2, strides=None, padding='valid')

    AveragePooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)

    AveragePooling3D(pool_size=(2, 2, 2), strides=None, padding='valid', data_format=None)

    GlobalMaxPooling1D()

    GlobalMaxPooling2D(dim_ordering='defalut')

    GlobalAveragePooling1D()

    GlobalAveragePooling2D(dim_ordering='default')

  4.源碼【以MaxPooling2D為例】   

class MaxPooling2D(_Pooling2D):

    @interfaces.legacy_pooling2d_support
    def __init__(self, pool_size=(2, 2), strides=None, padding='valid',
                 data_format=None, **kwargs):
        super(MaxPooling2D, self).__init__(pool_size, strides, padding,
                                           data_format, **kwargs)

    def _pooling_function(self, inputs, pool_size, strides,
                          padding, data_format):
        output = K.pool2d(inputs, pool_size, strides,
                          padding, data_format,
                          pool_mode='max')
        return output

  5.參數分析【以MaxPooling2D為例】

    pool_size:整數或長度為2的整數元組,代表在兩個方向【豎直、水平】上的下采樣因子,如取(2, 2)將使圖片在兩個維度上均變為原長的一半【4個數據合成為1個】。為整數表示各個維度值相同且為該數字。

    strides:步長,整數或長度為2的整數元組或None。

    padding:填充,包括"valid"和"same"。

    data_format:數據格式,一個字符串,"channels_last"【默認】或"channels_first"之一。輸入中尺寸的順序。"channels_last"對應形狀為(批,高度,寬度,通道)的輸入樣式,而"channels_first"對應形狀為(批,通道,高度,寬度)的輸入樣式。它默認在Keras配置文件中的~/.keras/keras.json中指定的image_data_format值。如果未指定,默認為"channels_last"。

四.備注

  1.padding填充策略

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM