本教程适用于Keras的入门与提升。本教程所用Keras版本为2.1.0,backend是Tensorflow,Keras的详细内容应该结合Keras官方文档和源代码一同学习。目前Tensorflow 1.9.0及以上版本将Keras集成为tf.keras,本教程将不对此项进行扩展。
我认为Keras是个轻量级的高级API,学习的捷径就是尽可能的阅读其源码。当然这对于初学者难度也不是很大。Keras的很多功能函数的源码复杂度并不高,功能类耦合性弱,可学习性强,可扩展性灵活。可以将其部分功能模块剥离成独立的工具,对算法原理的理解都有一定的帮助。
使用Keras 构建模型
Keras设计了俩种构建模型的方式函数式模型API
和顺序式模型API
官网称30s入门。
顺序式模型API
构建模型示例:
1 | from keras.models import Sequential#从models导入Sequential |
函数式模型API
构建模型示例:
1 | from keras.layers import Input, Dense |
模型编译参数设置
主要配置包括:
loss
:损失函数–MSE、KL散度、交叉熵、对数损失函数等;源码:losses.pyoptimizer
:优化函数–常用SGD、RMSprop、Adam等;源码:optimizers.pymetrics
:模型评估方法–准确率、AUC、F-score、包括损失函数代表的指标;源码:metrics.py
Tricks:
自定义评估函数
1 | #可以参照metrics.py定义评估函数的写法编写自己的评估函数 |
自定义损失函数
1 | #参考losses.py编写自己的损失函数 |
多任务(多头)训练编译配置
1 | #定义模型的输出是:sigmoid_1,sigmoid_2 |
模型训练参数设置
模型训练接口
- 以model.fit为例:
1 | model.fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None) |
1 | #重点查看 注释部分高亮字 |
model.train_on_batch
1
2train_on_batch(x, y, sample_weight=None, class_weight=None)
#以batch的形式训练数据,相当于tf的feed_dict,一次训练一个stepmodel.fit_generator
1
2model.fit_generator(self, generator, steps_per_epoch=None, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_queue_size=10, workers=1, use_multiprocessing=False, shuffle=True, initial_epoch=0)
#以生成器的形式喂数据,节省内存,以及兼容实时数据扩增
模型预测
model.predict
1 | predict(x, batch_size=None, verbose=0, steps=None) |
保存和加载模型
保存和加载整个模型
1 | from keras.models import load_model |
只保存/加载权重
1 | #使用hdf5来只加载权重(需要先安装HDF5和h5py) |
Keras模型中间阶段
获取中间层输出
1 | from keras.models import Model |
固定层参数
1 | #固定层的参数是否可训练在微调和迁移学习中是很关键的一步 |
总结
本章主要讲述了Keras是如何构建模型,如何设置优化算法,评估函数,训练参数的基本使用方法;在此基础上扩展了多任务学习,获取中间层参数,fine tune方法等。本教程结合keras 案例 运行其部分代码对学习Keras帮助巨大。
Reference
本文所有参考均来自Keras官方手册