在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(...)
通过这两种方法,您可以灵活地使用预训练模型,并根据自己的需求进行迁移学习或模型微调。