簡體   English   中英

Keras 中的特定丟失

[英]Specific Dropout in Keras

我想通過僅使用層的特定部分來訓練自動編碼器(此問題底部的自動編碼器示例中名為 FEATURES 的層)。

就我而言,新產品的 NOK 圖片非常罕見,但需要培訓。 目的是從 OK 圖片生成 NOK 圖片(我發現的所有示例都相反)。 這個想法是強制在 features[0:nx] 中學習 OK-picture 結構並在 features[nx:n] 中學習 NOK-picture 結構(可能來自類似的產品),以便使用 NOK-features 作為參數來生成 NOK - 圖片來自 OK-pictures。

我想到了兩個使用非隨機輟學的想法

(1) keras.layers.Dropout(rate, noise_shape=None, seed=None)有 noise_shape 參數,但我不確定它是否對我有幫助,因為它只描述了形狀。 能夠提供由 {0,1} 組成的掩碼以應用於圖層以打開/關閉特定節點是完美的

(2)創建一個自定義層(下面命名為 MaskLayer),它執行屏蔽層的特定節點,例如作為 {0,1} 的元組。

我已閱讀內容,但我認為它不適用(通過連接可以單獨凍結的圖層來生成圖層)。

def autoEncGenerate0( imgSizeX=28, imgSizeY=28, imgDepth=1):  ####:
    ''' keras blog autoencoder'''
    input_img = Input(shape=(imgSizeX, imgSizeY, imgDepth)) 
    x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
    x = MaxPooling2D((4, 4), padding='same')(x)
    x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
    encoded0 = MaxPooling2D((8, 8), padding='same', name="FEATURES")(x) 
    encoded1 = MaskLayer(mask)(encoded0) # TO BE DONE (B2) masking layer parts
    x = Conv2D(32, (3, 3), activation='relu', padding='same')(encoded1)
    x = UpSampling2D((8, 8))(x)
    x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
    x = UpSampling2D((4, 4))(x)
    decoded = Conv2D( imgDepth, (3, 3), activation='sigmoid', padding='same')(x)
    autoencoder = Model(input_img, decoded)
    autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
    return( autoencoder)

感謝您的提示。

tf.keras.layer.Layer的每個實例都具有trainable屬性,該屬性禁用該層變量的訓練。 UpSampling2D沒有任何變量,因此您無法對其進行訓練。 你想要的是訓練上采樣層之前的卷積層的變量。

你可以這樣做:

# define architecture here
autoencoder = Model(input_img, decoded)
layers_names = [l.name for l in autoencoder.layers]
trainable_layer_index = layers_names.index('FEATURES') - 1
for i in range(len(autoencoder.layers)):
    if i != trainable_layer_index:
        autoencoder.layers[i].trainable = False
# compile here

請注意,在將層設置為可訓練/不可訓練之后編譯 model。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM