目标检测 训练过程 代码
时间: 2023-11-17 20:05:03 浏览: 29
以下是目标检测训练过程的代码示例:
```
import tensorflow as tf
from tensorflow.keras import layers, Model, optimizers
from tensorflow.keras.applications import VGG16
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 设置超参数
batch_size = 32
input_shape = (224, 224, 3)
num_classes = 10
epochs = 100
# 加载预训练模型
base_model = VGG16(weights='imagenet', include_top=False, input_shape=input_shape)
# 冻结预训练模型的权重
for layer in base_model.layers:
layer.trainable = False
# 添加自定义分类层
x = base_model.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dense(1024, activation='relu')(x)
predictions = layers.Dense(num_classes, activation='softmax')(x)
# 训练模型
model = Model(inputs=base_model.input, outputs=predictions)
model.compile(loss='categorical_crossentropy', optimizer=optimizers.Adam(lr=0.0001), metrics=['accuracy'])
# 数据增强
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
'train',
target_size=input_shape[:2],
batch_size=batch_size,
class_mode='categorical')
validation_generator = test_datagen.flow_from_directory(
'val',
target_size=input_shape[:2],
batch_size=batch_size,
class_mode='categorical')
# 回调函数
early_stopping = EarlyStopping(monitor='val_loss', patience=10)
model_checkpoint = ModelCheckpoint('best_model.h5', save_best_only=True, save_weights_only=False)
# 训练模型
model.fit_generator(
train_generator,
steps_per_epoch=train_generator.samples // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=validation_generator.samples // batch_size,
callbacks=[early_stopping, model_checkpoint])
# 保存模型
model.save('final_model.h5')
```
以上代码使用VGG16作为预训练模型,添加了自定义分类层,并进行了数据增强。在训练过程中,使用了EarlyStopping和ModelCheckpoint两个回调函数,以提高模型的泛化能力和保存最佳模型。最后,将训练好的模型保存为final_model.h5。