【第11天】训练模型-Keras Application重要函数

摘要

  1. 资料集预处理

    1.1 ImageDataGenerator

    1.2 flow_from_directory

  2. Callbacks API

    2.1 EarlyStopping

    2.2 ModelCheckpoint

    2.3 Callbacks


内容

  1. 资料集预处理

    1.1 简介:

    • 【第6天】资料前处理-资料扩增曾提及,训练模型时,会增加训练样本,避免模型过拟合。其中,Data Augmentation也是一个增加训练样本的方法。
    • keras.preprocessing中内建的Data Augmentation函数,即为ImageDataGenerator。
    • flow_from_directory则是从ImageDataGenerator抽取训练样本,供模型训练每个epoch时使用。用於解决资料集过大,无法一次性载入记忆体的困境。

    1.2 ImageDataGenerator

    • 范例:
    # 设定批量生成器
    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)
    
    • 参数说明

      • rescale:预设值为0或None,若赋值(1./255)的话,会将图片的数据乘以该值,进行缩放。
      • rotation_range:若赋值为20,代表图像顺时针旋转20度;赋值为-20,代表图像逆时针旋转20度。
      • width_shift_range:图像随机水平移动,位移距离为图像长度乘以参数(0.2)。
      • height_shift_range:图像随机垂直移动,位移距离为图像长度乘以参数(0.2)。
      • shear_range:固定图像的X轴/Y轴,对Y轴/X轴座标进行垂直/水平移动。如图像从长方形,变成平行四边形,如下图。


      图片来自於:https://medium.com/ai%E5%8F%8D%E6%96%97%E5%9F%8E/preprocessing-data-image-data-augmentation%E5%AF%A6%E4%BD%9C%E8%88%87%E5%8F%83%E6%95%B8%E8%AA%AA%E6%98%8E-d05f2ed24194

      • zoom_range:让图像在水平或垂直方向进行放缩放。赋值在0~1之间,代表放大;赋值大於1,代表缩小。
      • fill_mode:用来填补图像资料扩增时,造成的像素缺失。

    1.3 flow_from_directory

    • 范例:
    # 读取资料集+批量生成器,产生每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)
    
    • 参数说明:

      • target_size:图像尺寸大小。
      • shuffle:预设为True,代表抽取资料时,会随机将资料打散。
  2. 预训练模型种类

    2.1 简介:

    • Callback:训练模型时,可以呼叫该函数,监控模型的训练状态,用於即时自动调整其他函数。
    • EarlyStopping:设定模型停止训练的条件,避免发生过拟合的现象。
    • ModelCheckpoint:当模型的表现优於先前,才会覆盖储存先前的权重,用於储存最佳模型。

    2.2 EarlyStopping

    • 范例
    # 设定earlystop条件
    estop = EarlyStopping(monitor='val_loss', patience=10, 
                          mode='min', verbose=1)
    
    • 参数说明:

      • monitor:欲监控的数值。通常使用val_loss或val_acc
      • mode:选择监控的模式。对应monitor类别,val_loss设定min或val_acc设定max。
      • patience:若赋值为10,代表模型连续训练10个epoch後,监控的数值表现没有更好,就会停止训练。
      • verbose:用於选择模型训练资讯的显示方式。

    2.3 ModelCheckpoint

    • 范例:
    # 设定模型储存条件(储存最佳模型)
    checkpoint = ModelCheckpoint('Densenet201_checkpoint_v2.h5', verbose=1,
                                  monitor='val_loss', save_best_only=True,
                                  mode='min')
    
    • 参数说明:

      • 待读取模型路径:'Densenet201_checkpoint_v2.h5'
      • monitor:欲监控的数值。通常使用val_loss或val_acc
      • mode:选择监控的模式。对应monitor类别,val_loss设定min或val_acc设定max。
      • save_best_only:预设为False,代表每个epoch训练後,都会覆盖储存权重。若设定为True,只有当模型表现更佳时,才会覆盖储存权重。
      • verbose:用於选择模型训练资讯的显示方式。

    2.4 Callbacks

    • 范例:
    # 重新训练模型权重(以callbacks呼叫checkpoint、estop、reduce_lr)
    history = model.fit_generator(train_generator,
                       epochs=500, 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])
    
    • 参数说明:

      • 读取资料集+批量生成器,抽取每epoch训练样本:train_generator。
      • epochs:训练回合数。
      • verbose:用於选择模型训练资讯的显示方式。
      • steps_per_epoch:设定每个epoch要执行多少step,详细说明请参阅Keras fit_generator的steps_per_epoch。计算公式如下。
        steps_per_epoch = 资料集样本数 除以 batch size
      • callbacks:用来储存checkpoint、estop、reduce_lr的函数。

小结

下一章,目标是:「和大家简单介绍Learning rate,并比较3种Learning rate的策略与优劣」。

让我们继续看下去...


参考资料

  1. Keras Application_中文
  2. Preprocessing Data : Image Data Augmentation实作与参数说明

<<:  JavaScript | By value V.S. By reference(传值 V.S. 传参考)

>>:  Day11:Swift 基础语法 —Array

DAY28-EXCEL统计分析:回归分析介绍

回归分析 回归分析的主要目的是为了探讨一个或多个自变数和一个因变数间的关系,利用方程序来解释资料或预...

30天程序语言研究

今天是30天程序语言研究的第三天,研究的语言是python,今天主要学习的部分是如何制作一个简易的加...

DAY14 - firestore 使用条件来进阶查询

上一篇介绍 firestore CRUD 的各种方式,今天要来介绍进阶的查询资料方式,利用条件去过滤...

Day 20 - UML x Component — Independent (下)

今天终於来到 UML 的最後一篇了,要来接着把没介绍到的常见 UI 元件介绍完,那就废话不罗唆直接...

.Net Core Web Api_笔记22_Swagger自订文件并读取API注解描述

Swagger刚开始可以将其理解成网页版本的postman 我们可以对其测试发送资料看回传结果 在预...