[英]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.