溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

keras中卷積層Conv2D怎么使用

發(fā)布時(shí)間:2023-02-22 09:29:07 來源:億速云 閱讀:110 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“keras中卷積層Conv2D怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

    keras中卷積層Conv2D的學(xué)習(xí)

    keras.layers.convolutional.Conv2D(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)

    此操作將二維向量進(jìn)行卷積,當(dāng)使用該層作為第一層時(shí),應(yīng)提供input_shape參數(shù)。

    參數(shù)

    • filters:卷積核的數(shù)目(即輸出的維度)。

    • kernel_size:?jiǎn)蝹€(gè)整數(shù)或由兩個(gè)整數(shù)構(gòu)成的list/tuple,卷積核的寬度和長(zhǎng)度。如為單個(gè)整數(shù),則表示在各個(gè)空間維度的相同長(zhǎng)度。

    • strides:?jiǎn)蝹€(gè)整數(shù)或由兩個(gè)整數(shù)構(gòu)成的list/tuple,為卷積的步長(zhǎng)。如為單個(gè)整數(shù),則表示在各個(gè)空間維度的相同步長(zhǎng)。任何不為1的strides均與任何不為1的dilation_rata均不兼容。

    • padding:補(bǔ)0策略,為“valid”, “same”?!皏alid”代表只進(jìn)行有效的卷積,即對(duì)邊界數(shù)據(jù)不處理?!皊ame”代表保留邊界處的卷積結(jié)果,通常會(huì)導(dǎo)致輸出shape與輸入shape相同。

    • activation:激活函數(shù),為預(yù)定義的激活函數(shù)名(參考激活函數(shù)),或逐元素(element-wise)的Theano函數(shù)。如果不指定該參數(shù),將不會(huì)使用任何激活函數(shù)(即使用線性激活函數(shù):a(x)=x)。

    • dilation_rate:?jiǎn)蝹€(gè)整數(shù)或由兩個(gè)個(gè)整數(shù)構(gòu)成的list/tuple,指定dilated convolution中的膨脹比例。任何不為1的dilation_rata均與任何不為1的strides均不兼容。

    • data_format:字符串,“channels_first”或“channels_last”之一,代表圖像的通道維的位置。該參數(shù)是Keras 1.x中的image_dim_ordering,“channels_last”對(duì)應(yīng)原本的“tf”,“channels_first”對(duì)應(yīng)原本的“th”。以128x128的RGB圖像為例,“channels_first”應(yīng)將數(shù)據(jù)組織為(3,128,128),而“channels_last”應(yīng)將數(shù)據(jù)組織為(128,128,3)。該參數(shù)的默認(rèn)值是~/.keras/keras.json中設(shè)置的值,若從未設(shè)置過,則為“channels_last”。

    • use_bias:布爾值,是否使用偏置項(xiàng)。

    • kernel_initializer:權(quán)值初始化方法,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的初始化器。

    • bias_initializer:權(quán)值初始化方法,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的初始化器。

    • kernel_regularizer:施加在權(quán)重上的正則項(xiàng),為Regularizer對(duì)象。

    • bias_regularizer:施加在偏置向量上的正則項(xiàng),為Regularizer對(duì)象。

    • activity_regularizer:施加在輸出上的正則項(xiàng),為Regularizer對(duì)象。

    • kernel_constraints:施加在權(quán)重上的約束項(xiàng),為Constraints對(duì)象。

    • bias_constraints:施加在偏置上的約束項(xiàng),為Constraints對(duì)象。

    keras中conv2d,conv2dTranspose的Padding詳解

    conv2d和conv2dTranspose屬于最常用的層,但在keras的實(shí)現(xiàn)中關(guān)于padding的部分有點(diǎn)模糊,周末趁著空閑做了一些嘗試,來實(shí)驗(yàn)padding的valid和same參數(shù)在實(shí)際過程中如何操作的。

    conv2D演示代碼

    conv2D部分

    v_input = np.ones([1,5,5,1])
    kernel = np.ones([3,3])
    stride = 1
    model = Sequential()
    model.add(Conv2D(1, kernel_size=(3, 3),
                     activation='relu',
                     padding="valid" ,  # "same"
                     strides = 1, 
                     # dilation_rate = 1,
                     kernel_initializer = keras.initializers.Ones(),
                     input_shape=v_input.shape[1:]))

    其中stride可以嘗試多組測(cè)試

    padding在valid 和 same 間切換測(cè)試

    Conv2d演示結(jié)論

    padding 為valid則不進(jìn)行填充, 根據(jù)stride的滑動(dòng)大小來做平移, 則:

    output_shape = ceil( (input_shape - (kernel_size - 1)) / stride )

    如果是same模式則 會(huì)進(jìn)行左右上下的補(bǔ)齊, 其中左,上依次補(bǔ)齊 flood (kernel_size -1 ) / 2 , 右下補(bǔ)齊ceil (( kernel_size - 1) /2 ) ,補(bǔ)齊后進(jìn)行的操作就是類似valid下的滑動(dòng)卷積

    output_shape = ceil (input_shape / stride)
    • ceil表示上取整 

    • flood表示下取整

    CONV2Dtranspose演示代碼

    v_input = np.ones([1,5,5,1])
    kernel = np.ones([3,3])
    stride = 1
    model = Sequential()
    model.add(Conv2DTranspose(1, kernel_size=(3, 3),
                     activation='relu',
                     padding="valid" ,  # "same"
                     strides = 1, 
                     # dilation_rate = 1,
                     kernel_initializer = keras.initializers.Ones(),
                     input_shape=v_input.shape[1:]))

    如果padding的設(shè)置為valid則,保持最小相交的原則上下左右均填充kernel_size大小,如果stride設(shè)置為非1,起實(shí)際的作用和dilation_rate一樣均是在矩陣中進(jìn)行填充(實(shí)際滑動(dòng)是永遠(yuǎn)都是1) 具體填充出來的矩陣大小是 (input_size -1) * stride + 1 + 2 * (kernel_size - 1)

    之后就是按照這個(gè)矩陣做著類似conv2d valid的卷積 則:

    output_shape = (input_size -1) * stride + 1 + 2 * (kernel_size - 1) - (kernel_size -1) = (input_size - 1) * stride + kernel_size

    keras中卷積層Conv2D怎么使用

    如果padding為same的話則output_shape = input_shape * stride

    其中原始矩陣左上padding = ceil (( kernel_size ) /2 )  右下補(bǔ)齊 flood (( kernel_size ) /2 )  這里conv2d

    “keras中卷積層Conv2D怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI