在Keras中使用預訓練模型有兩種常見的方法:遷移學習和模型微調。
from keras.applications import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
# 加載ResNet50預訓練模型
base_model = ResNet50(weights='imagenet', include_top=False)
# 添加自定義的分類層
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(num_classes, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=predictions)
# 凍結預訓練模型的所有層
for layer in base_model.layers:
layer.trainable = False
# 編譯模型并訓練
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit_generator(...)
# 解凍預訓練模型的部分層
for layer in model.layers[:100]:
layer.trainable = False
for layer in model.layers[100:]:
layer.trainable = True
# 編譯模型并繼續訓練
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit_generator(...)
通過這兩種方法,您可以靈活地使用預訓練模型,并根據自己的需求進行遷移學習或模型微調。