InceptionV4
1.1 来源
1.2 架构
1.3 特性
训练过程
2.1 预训练模型
2.2 设置Callbacks
2.3 设置训练集
2.4 开始训练模型
2.5 储存模型与纪录学习曲线
模型训练结果
3.1 学习曲线
3.2 Accuracy与Loss
验证模型准确度
4.1 程序码
4.2 验证结果
InceptionV4
1.1 来源
1.2 架构
完整架构:
Stem:因Inception module在低维度特徵提取时,降低特徵图尺寸的速度过快,可能会损失大量特徵信息,进一步影响模型效能,故以Stem取代一般卷积层。
Inception Module:
Reduction:与Stem的设计概念相同,避免急遽降低特徵图的尺寸。理论依据可参考论文5. Efficient Grid Size Reduction
Reduction-A:
Reduction-B:
Dropout:在Softmax与Average Pooling间,加入Dropout(0.2),降低模型训练过拟合的可能性。
1.3 特性
训练过程:
2.1 预训练模型
# IMPORT MODULES
from keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau
from keras.layers import Input, Dense, GlobalAveragePooling2D
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import Adam
import matplotlib.pyplot as plt
from keras.models import Model
from keras.applications import InceptionResNetV2
# -----------------------------1.客制化模型--------------------------------
# 载入keras模型(更换输出图片尺寸)
model = create_model(num_classes=800, dropout_prob=0.2,
weights=None, include_top=True)
# 编译模型
model.compile(optimizer=Adam(lr=0.001),
loss='categorical_crossentropy',
metrics=['accuracy'])
2.2 设置Callbacks
# ---------------------------2.设置callbacks----------------------------
# 设定earlystop条件
estop = EarlyStopping(monitor='val_loss', patience=15, mode='min', verbose=1)
# 设定模型储存条件
checkpoint = ModelCheckpoint('InceptionV4_checkpoint_v2.h5', verbose=1,
monitor='val_loss', save_best_only=True,
mode='min')
# 设定lr降低条件
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.5,
patience=5, mode='min', verbose=1,
min_lr=1e-6)
2.3 设置训练集
# -----------------------------3.设置资料集--------------------------------
# 设定ImageDataGenerator参数(路径、批量、图片尺寸)
train_dir = './workout/train/'
valid_dir = './workout/val/'
test_dir = './workout/test/'
batch_size = 64
target_size = (120, 120)
# 设定批量生成器
train_datagen = ImageDataGenerator(rescale=1./255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.5,
fill_mode="nearest")
val_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
# 读取资料集+批量生成器,产生每epoch训练样本
train_generator = train_datagen.flow_from_directory(train_dir,
target_size=target_size,
batch_size=batch_size)
valid_generator = val_datagen.flow_from_directory(valid_dir,
target_size=target_size,
batch_size=batch_size)
test_generator = test_datagen.flow_from_directory(test_dir,
target_size=target_size,
batch_size=batch_size,
shuffle=False)
2.4 重新训练模型权重
# -----------------------------4.开始训练模型------------------------------
# 重新训练权重
history = model.fit_generator(train_generator,
epochs=50, verbose=1,
steps_per_epoch=train_generator.samples//batch_size,
validation_data=valid_generator,
validation_steps=valid_generator.samples//batch_size,
callbacks=[checkpoint, estop, reduce_lr])
2.5 储存模型与纪录学习曲线
# -----------------------5.储存模型、纪录学习曲线------------------------
# 储存模型
model.save('./InceptionV4_retrained_v2.h5')
print('已储存InceptionV2_retrained_v2.h5')
# 画出acc学习曲线
acc = history.history['accuracy']
epochs = range(1, len(acc) + 1)
val_acc = history.history['val_accuracy']
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'r', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend(loc='lower right')
plt.grid()
# 储存acc学习曲线
plt.savefig('./acc.png')
plt.show()
# 画出loss学习曲线
loss = history.history['loss']
val_loss = history.history['val_loss']
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'r', label='Validation loss')
plt.title('Training and validation loss')
plt.legend(loc='upper right')
plt.grid()
# 储存loss学习曲线
plt.savefig('loss.png')
plt.show()
模型训练结果
3.1 训练epochs:28 epochs。
3.2 耗费时间:3小时44分28秒(13468秒)。
3.3 学习曲线
3.4 Accuary与Loss
验证准确度
4.1 程序码
# -------------------------6.验证模型准确度--------------------------
# 以vali资料夹验证模型准确度
test_loss, test_acc = model.evaluate_generator(test_generator,
steps=test_generator.samples//batch_size,
verbose=1)
print('test acc:', test_acc)
print('test loss:', test_loss)
4.2 验证结果
下一章目标是:介绍第五个预训练模型InceptionResNetV2,与分享训练成果」。
让我们继续看下去...
>>: 【Side Project】 订单清单 - 画面设计
之後我们要处理寄送E-mail的部分, 这次我们会使用Gmail, 好处是一般寄送E-mail会有网...
早起运动Day8 - 身体习惯 不假思索的起床,做第一件事情以後就会带到第二件事情。 就像看...
今日文章目录 将这十天的零件,组成一页式网页 10天CSS小结 我这次写铁人赛的目标,是想将目前学...
目标 安装环境 勘误修正及补充 1. 前言 到目前为止 已经把永丰的api参数以及相关制作流程做完了...
今天要讲的是效能监视器(Performance Monitor),他是Windows内建的监控程序之...