簡體   English   中英

為機器學習重新訓練 Inception V3 模型

[英]Retraining the Inception V3 Model for Machine Learning

我正在使用 Inception V3 模型對兩個類進行圖像分類。 因為我使用了兩個新類(正常和異常),所以我凍結了 Inception V3 模型的頂層並用我自己的替換它。

base_model = keras.applications.InceptionV3(
        weights ='imagenet',
        include_top=False, 
        input_shape = (img_width,img_height,3))

#Classifier Model ontop of Convolutional Model
model_top = keras.models.Sequential()
model_top.add(keras.layers.GlobalAveragePooling2D(input_shape=base_model.output_shape[1:], data_format=None)),
model_top.add(keras.layers.Dense(400,activation='relu'))
model_top.add(keras.layers.Dropout(0.5))
model_top.add(keras.layers.Dense(1,activation = 'sigmoid'))
model = keras.models.Model(inputs = base_model.input, outputs = model_top(base_model.output))

在 Inception V3 中以這種方式凍結卷積層是否是訓練所必需的?

#freeze the convolutional layers of InceptionV3
for layer in base_model.layers:
    layer.trainable = False

model.compile(optimizer = keras.optimizers.Adam(
                    lr=0.00002,
                    beta_1=0.9,
                    beta_2=0.999,
                    epsilon=1e-08),
                    loss='binary_crossentropy',
                    metrics=['accuracy'])

沒有必要凍結 CNN 的第一層; 您可以從預先訓練的模型中初始化權重。 但是,在大多數情況下,建議凍結它們,因為它們可以提取的特征足夠通用,可以幫助完成任何與圖像相關的任務,並且這樣做可以加快訓練過程。

話雖這么說,你應該嘗試一點與要凍結的層數 允許base_model的后幾層對您的任務進行微調可以提高性能。 您可以將其視為模型的超參數。 說要凍結只有第30層:

for layer in model.layers[:30]:
    layer.trainable = False

暫無
暫無

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

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