迁移学习实践 猫分类 python
时间: 2023-07-08 11:54:10 浏览: 48
好的,针对您的问题,以下是一个简单的迁移学习实践,使用预训练的 ResNet50 模型进行猫分类。我们使用 Python 编写代码。
首先,我们需要准备数据集。可以使用 Kaggle 上的猫狗分类数据集,将其中的猫的图片分出来作为我们的训练数据集。接着,我们将数据集按照一定比例分为训练集和验证集。
然后,我们加载预训练的 ResNet50 模型,并添加一个新的全连接层用于分类。在这个新的全连接层之前,我们添加一个平均池化层来将 ResNet50 输出的特征图转换为一维向量。
接下来,我们冻结 ResNet50 的所有层,只训练新添加的全连接层。在训练过程中,我们可以使用数据增强技术来增加数据的多样性。最后,我们评估模型在验证集上的表现,并保存模型。
以下是代码示例:
```python
from keras.applications.resnet50 import ResNet50
from keras.layers import Dense, GlobalAveragePooling2D
from keras.models import Model
from keras.preprocessing.image import ImageDataGenerator
# 准备数据集
train_data_dir = 'path/to/train/dataset'
val_data_dir = 'path/to/validation/dataset'
img_width, img_height = 224, 224
batch_size = 32
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
val_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='categorical')
val_generator = val_datagen.flow_from_directory(
val_data_dir,
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='categorical')
# 加载预训练的 ResNet50 模型
base_model = ResNet50(weights='imagenet', include_top=False)
# 添加新的全连接层
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(2, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=predictions)
# 冻结 ResNet50 的所有层,只训练新添加的全连接层
for layer in base_model.layers:
layer.trainable = False
# 编译模型
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit_generator(
train_generator,
steps_per_epoch=train_generator.samples // batch_size,
epochs=10,
validation_data=val_generator,
validation_steps=val_generator.samples // batch_size)
# 评估模型
scores = model.evaluate_generator(val_generator, val_generator.samples // batch_size)
print("Accuracy: %.2f%%" % (scores[1]*100))
# 保存模型
model.save('cat_classifier.h5')
```
希望这个例子对您有所帮助!