Keras通用技能归纳
- 迁移学习
- GPU,Session
- 训练:metrics
- 训练:callback
- 训练:loss
- 模型融合
迁移学习
常见的是预训练模型+全局池化的操作,如下:
1 | from keras.applications import Xception |
如果是提取训练完成的模型几层来生成特征向量用于后续步骤,拆模型常见方法:
1 | #加载预训练模型,这里build_classifier()是自己的方法 |
预训练权重也可以在最后,
以model_feature.local_weights('keras_weights_bin-03-0.02.h5', by_name=True)
方式导入权重。
GPU,Session
说一下常用的3个操作~
指定GPU卡号
1
2import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2"Session对GPU用量动态调整
1
2
3
4
5
6
7
8
9
10
11
12import keras.backend.tensorflow_backend as KTF
import tensorflow as tf
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
config = tf.ConfigProto()
config.gpu_options.allow_growth=True #不全部占满显存, 按需分配
sess = tf.Session(config=config)
KTF.set_session(sess)多GPU训练
1
2
3parallel_model = multi_gpu_model(model, gpus=8)
parallel_model.compile(loss='categorical_crossentropy',
optimizer='rmsprop')
训练:metrics
通常我们在model.compile()
内metrices会如下写:
metrics=[‘mae’, ‘acc’]
或者
from keras import metrics && metrics=[metrics.mae, metrics.categorical_accuracy]
但比赛等场景评估标准为f1 score,以下为添加f1 score进metrics
1 | from keras import backend as K |
使用:
1 | model.compile(loss='binary_crossentropy', |
还有就是解决数据不均衡问题时采用的Metrics:sensitivity
和specificity
,下面会提到
训练:callback
callback传入model.fit_generator()
内在每轮结束时调用,这里给出个例子,具体解释可见中文文档
1 | import keras |
注意:谨慎使用ReduceLROnPlateau
,使用不当结果会倒退许多
附model_checkpoint
的自构方法:
1 | class MyCbk(keras.callbacks.Callback): |
训练:Loss
通常的就不说了,说一下关于解决数据样本不均衡问题的
首先说明,sample_weights
,class_weights
用于model.fit()
;
class_weight 针对类
主要针对的上数据不均衡问题,比如:异常检测的二项分类问题,异常数据仅占1%,正常数据占99%; 此时就要设置不同类对loss的影响。
sample_weight 针对样本
主要解决的是样本质量不同的问题,比如前1000个样本的可信度,那么它的权重就要高,后1000个样本可能有错、不可信,那么权重就要调低。
loss_weights
用于model.compile()
时候,是多loss时各loss权重比
1 | # class weights |
1 | class_weight={ |
有关解决数据不均衡的还有些小姿势,这里
模型融合
请见之前俺滴博客~