使用 Keras 构建和训练 ResNet-50 模型的代码示例
以下是一个示例代码部分,展示了如何使用 Keras 库来构建和训练 ResNet-50 模型:
import tensorflow as tf
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.models import Model
# 加载预训练的 ResNet-50 模型,不包括顶层的全连接层
base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# 添加自定义的全连接层
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(num_classes, activation='softmax')(x) # 根据需要的分类数设置 num_classes
# 构建完整的模型
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(train_dataset, epochs=10, validation_data=validation_dataset)
# 解冻部分层进行微调
for layer in model.layers[:100]:
layer.trainable = False
for layer in model.layers[100:]:
layer.trainable = True
# 继续训练模型
model.fit(train_dataset, epochs=5, validation_data=validation_dataset)
上述代码步骤包括:
- 导入所需的库和模块。
- 使用
ResNet50函数加载预训练的 ResNet-50 模型,其中weights='imagenet'表示使用在 ImageNet 上预训练的权重。 - 在 ResNet-50 模型的顶部添加自定义的全连接层。
- 构建完整的模型,使用
Model函数指定输入和输出。 - 冻结除全连接层以外的所有层的权重,确保它们在训练过程中不会被更新。
- 编译模型,设置优化器、损失函数和评价指标。
- 使用训练数据拟合模型。
- 解冻部分层进行微调,可以根据需要微调不同的层,这里演示了解冻前 100 层。
- 继续训练模型,以微调解冻的层。
请注意,代码中的 train_dataset 和 validation_dataset 是代表训练和验证数据的示例对象,你需要根据你自己的数据集进行相应的处理和适配。
这只是一个简单的示例代码,实际使用中可能需要根据具体任务和数据集的要求进行更详细的调整和处理。
原文地址: https://www.cveoy.top/t/topic/bwwZ 著作权归作者所有。请勿转载和采集!