keras:model.fit和callback含义
⼀、总结
⼀句话总结:
⼆、keras深度训练1:fit和callback
⼀、总结
⼀句话总结:
keras的callback参数可以帮助我们实现在训练过程中的适当时机被调⽤。实现实时保存训练模型以及训练参数。
1. model.fit
model.fit(
lf,
x,
y,
batch_size=32,
nb_epoch=10,
verbo=1,
callbacks=[],
validation_split=0.0,
validation_data=None,
shuffle=True,
class_weight=None,
sample_weight=None
)
其中:
1. x为输⼊数据。如果模型只有⼀个输⼊,那么x的类型是numpy array,如果模型有多个输⼊,那么x的类型应当为list,list的元素是
对应于各个输⼊的numpy array。如果模型的每个输⼊都有名字,则可以传⼊⼀个字典,将输⼊名与其输⼊数据对应起来。
2. y:标签,numpy array。如果模型有多个输出,可以传⼊⼀个numpy array的list。如果模型的输出拥有名字,则可以传⼊⼀个字
典,将输出名与其标签对应起来。
3. batch_size:整数,指定进⾏梯度下降时每个batch包含的样本数。训练时⼀个batch的样本会被计算⼀次梯度下降,使⽬标函数优化
⼀步。高考英语词组
4. nb_epoch:整数,训练的轮数,训练数据将会被遍历nb_epoch次。Ker吃什么血糖降得快
as中nb开头的变量均为”number of”的意思
5. verbo:⽇志显⽰,0为不在标准输出流输出⽇志信息,1为输出进度条记录,2为每个epoch输出⼀⾏记录
6. callbacks:list,其中的元素是keras.callbacks.Callback的对象。这个list中的回调函数将会在训练过程中的适当时机被调⽤,参考
回调函数
7. validation_split:0~1之间的浮点数,⽤来指定训练集的⼀定⽐例数据作为验证集。验证集将不参与训练,并在每个epoch结束后测
试的模型的指标,如损失函数、精确度等。
8. validation_data:形式为(X,y)或(X,y,sample_weigh十六年前的回忆教学设计
ts)的tuple,是指定的验证集。此参数将覆盖validation_spilt。
9. shuffle:布尔值,表⽰是否在训练过程中每个epoch前随机打乱输⼊样本的顺序。请注意:这个shuffle并不是对整个数据集打乱顺
序的,⽽是先split出训练集和验证集工地安全质量标语
,然后对训练集进⾏shuffle。
10. class_weight:字典,将不同的类别映射为不同的权值,该参数⽤来在训练过程中调整损失函数(只能⽤于训练)。该参数在处理⾮
平衡的训练数据(某些类的训练样本数很少)时,可以使得损失函数对样本数不⾜的数据更加关注。
11. sample_weight:权值的numpy array,⽤于在训练时调整损失函数(仅⽤于训练)。可以传递⼀个1D的与样本等长的向量⽤于对
样本进⾏1对1的加权,或者在⾯对时序数据时,传递⼀个的形式为(samples,quence_length)的矩阵来为每个时间步上的样本赋不同的权。这种情况下请确定在编译模型时添加了sample_weight_mode=’temporal’。
12345678910111234567891011
fit函数返回⼀个History的对象,其History.history属性记录了损失函数和其他指标的数值随epoch变化的情况,如果有验证集的话,也包含了验证集的这些指标变化情况。
2 callback
keras的callback参数可以帮助我们实现在训练过程中的适当时机被调⽤。实现实时保存训练模型以及训练参数。
2.1 ModelCheckpoint
keras.callbacks.ModelCheckpoint(
filepath,
monitor='val_loss',
verbo=0,
save_best_only=Fal,
save_weights_only=Fal,
mode='auto',
period=1
)
其中:
1. filename:字符串,保存模型的路径
2. monitor:需要监视的值
3. verbo:信息展⽰模式,0或1
4. save_best_only:当设置为True时,将只保存在验证集上性能最好的模型,⼀般我们都会设置为True.
5. mode:‘auto’,‘min’,‘max’之⼀,在save_best_only=True时决定性能最佳模型的评判准则,例如,当监测值为val_acc
时,模式应为max,当检测值为val_loss时,模式应为min。在auto模式下,评价准则由被监测值的名字⾃动推断。
6. save_weights_only:若设置为True,则只保存模型权重,否则将保存整个模型(包括模型结构,配置信息等)
7. period:CheckPoint之间的间隔的epoch数
2.2 EarlyStopping
from keras.callbacksimport EarlyStopping
keras.callbacks.EarlyStopping(
monitor='val_loss',
patience=0,
verbo=0,
mode='auto'
)
model.fit(X, y, validation_split=0.2, callbacks=[early_stopping])
其中:
1. monitor:需要监视的量
2. patience:当early stop被激活(如发现loss相⽐上⼀个epoch训练没有下降),则经过patience个epoch后停⽌训练。
3. verbo:信息展⽰模式
4. mode:‘auto’,‘min’,‘max’之⼀,在min模式下,如果检测值停⽌下降则中⽌训练。在max模式下,当检测值不再上升则
停⽌训练。
2.3 LearningRateSchedule
学习率动态调整
keras.callbacks.ReduceLROnPlateau(
monitor='val_loss',
factor=0.1,
patience=10,
verbo=0,
mode='auto',
epsilon=0.0001,
cooldown=0,
min_lr=0
)
其中:
1. monitor:被监测的量
2. factor:每次减少学习率的因⼦,学习率将以lr = lr*factor的形式被减少
3. patience:当patience个epoch过去⽽模型性能不提升时,学习率减少的动作会被触发
4. mode:‘auto’,‘min’,‘max’之⼀,在min模式下,如果检测值触发学习率减少。在max模式下,当检测值不再上升则触发
学习率减少。
5. epsilon:阈值,⽤来确定是否进⼊检测值的“平原区”
6. cooldown:学习率减少后,会经过cooldown个epoch才重新进⾏正常操作
7. min_lr:学习率的下限
当学习停滞时,减少2倍或10倍的学习率常常能获得较好的效果
⾃定义动态调整学习率:
def step_decay(epoch):
initial_lrate =0.01
drop =0.5
epochs_drop =10.0
lrate = initial_lrate * math.pow(drop,math.floor((1+epoch)/epochs_drop))
return lrate
lrate =LearningRateScheduler(step_decay)
sgd =SGD(lr=0.0, momentum=0.9, decay=0.0, nesterov=Fal)
model.fit(train_t_x, train_t_y, validation_split=0.1, nb_epoch=200, batch_size=256, callbacks=[lrate])
具体可以参考这篇⽂章Using Learning Rate Schedules for Deep Learning Models in Python with Keras
2.4 记录每⼀次epoch的训练/验证损失/准确度?
Model.fit函数会返回⼀个 History 回调,该回调有⼀个属性history包含⼀个封装有连续损失/准确的lists。代码如下:
hist = model.fit(X, y,validation_split=0.2)
print(hist.history)
Keras输出的loss,val这些值如何保存到⽂本中去
Keras中的fit函数会返回⼀个History对象,它的History.history属性会把之前的那些值全保存在⾥⾯,如果有验证集的话,也包含了验证集的这些指标变化情况,具体写法
hist=model.fit(train_t_x,train_t_y,batch_size=256,shuffle=True,nb_epoch=nb_epoch,validation_split=0.1)
with open('log_sgd_','w')as f:
f.write(str(hist.history))
2.5 TensorBoard
tensorboard =TensorBoard(log_dir='./logs', histog国内热点新闻
ram_freq=0, write_graph=True, write_images=Fal)
# define model
model.fit(X_train, Y_train,
batch_size=batch_size,
epochs=nb_epoch,
validation_data=(X_test, Y_test),
shuffle=True,
callbacks=[tensorboard])
使⽤tensorboard时,在终端输⼊
tensorboard --logdir path_to_current_dir
2.5 多个回调函数⽤逗号隔开
from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint
from keras.callbacks import ReduceLROnPlateau
# callbacks红豆包
:
tb =TensorBoard(log_dir='./logs', # log ⽬录
histogram_freq=1, # 按照何等频大连交通大学是几本
率(epoch)来计算直⽅图,0为不计算 batch_size=32, # ⽤多⼤量的数据计算直⽅图
write_graph=True, # 是否存储⽹络结构图
write_grads=Fal, # 是否可视化梯度直⽅图
write_images=Fal,# 是否可视化参数
embeddings_freq=0,
embeddings_layer_names=None,
embeddings_metadata=None)
es=EarlyStopping(monitor='val_loss', patience=20, verbo=0)
mc=ModelCheckpoint(
'./logs/weight.hdf5',
monitor='val_loss',
verbo=0,
save_best_only=True,
save_weights_only=Fal,
mode='auto',
period=1
)
rp=ReduceLROnPlateau(
monitor='val_loss',
factor=0.1,
patience=20,
verbo=0,
mode='auto',
epsilon=0.0001,
cooldown=0,
min_lr=0
)
callbacks =[es,tb,mc,rp]
# start to train out model
bs =100
ne =1000
hist = model.fit(data, labels_cat,batch_size=bs,epochs=ne,
verbo=2,validation_split=0.25,callbacks=callbacks)
print("train process done!!")