![](/img/trans.png)
[英]retraining last layer of inception-v3 significantly slowers the classification
[英]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.