Keras中回调函数应用点击回调函数使用
相关代码点这里
先导入callbacks
#导入callbacks模块
import keras.callbacks as callb
1.EarlyStopping
(1)作用:当被监测的数量不再提升,则停止训练。
(2)相关参数:
(3)用法:
#EarlyStopping
earlystop = callb.EarlyStopping(min_delta=0.0005,patience=2,verbose=1)
表示每训练
p
a
t
i
e
n
c
e
=
2
patience=2
patience=2轮就观察检测数据的变化,若监测数据变化绝对值小于
m
i
n
d
e
l
t
a
=
0.0005
min_delta=0.0005
mindelta=0.0005,则停止训练
2.ReduceLROnPlateau
(1)作用:当标准评估停止提升时,降低学习速率。
当学习停止时,模型总是会受益于降低 2-10 倍的学习速率。 这个回调函数监测一个数据并且当这个数据在一定「有耐心」的训练轮之后还没有进步, 那么学习速率就会被降低。
(2)相关参数:
(3)用法:
#ReduceLROnPlateau
reduceLR = callb.ReduceLROnPlateau(min_delta=0.001,patience=2,verbose=1)
表示每训练
p
a
t
i
e
n
c
e
=
2
patience=2
patience=2轮就观察检测数据的变化,若监测数据变化绝对值小于
m
i
n
d
e
l
t
a
=
0.001
min_delta=0.001
mindelta=0.001,则降低学习率。里面的值是为了方便观察瞎给的,最好还是按照官方的来
3.LambdaCallback
代码
(1)作用:在训练进行中创建简单,自定义的回调函数。
(2)相关参数:
(3)用法:
#定义每轮操作
def epoch_end_operation():
#测试模型
loss,acc = model.evaluate(x_test,y_test,verbose=0)
print('本轮测试后结果:')
print('loss:',loss,'accuracy:',acc)
print('######')
print()
#定义训练结束后的操作
def train_end_operation():
print('GAME OVER!')
#自定义回调函数
#每轮结束后的回调函数
epoch_print_callback = callb.LambdaCallback(
#定义在每轮结束是操作
on_epoch_end =lambda epoch,
#执行操作
logs: epoch_end_operation()
)
#训练结束后的回调函数
train_end_callback = callb.LambdaCallback(
on_train_end=lambda
logs: train_end_operation()
)
#需要执行的回调函数列表
callback_list = [epoch_print_callback,train_end_callback]
#训练模型
model.fit(x_train,y_train,validation_split=0.3,batch_size=60,epochs=3,callbacks=callback_list,verbose=1)
(4)注意:一个有逗号,一个没有!
4.自定义回调函数
(1)作用:
(2)用法:
#定义每轮结束操作
def epoch_end_operation(epoch):
#测试模型
loss,acc = model.evaluate(x_test,y_test,verbose=0)
print('第%s轮测试后结果:' % epoch)
print('loss:%.4f' % loss)
print('############')
print()
#定义训练结束操作
def train_end_operation():
print('GAME OVER!')
#自定义回调函数
class CaculateLoss(callb.Callback):
def on_epoch_end(self, epoch, logs={}):
epoch_end_operation(epoch)
class TrainEnd(callb.Callback):
def on_train_end(self,logs={}):
train_end_operation()
caculate_loss = CaculateLoss()
train_end = TrainEnd()
#需要执行的回调函数列表
callback_list = [earlystop,reduceLR,caculate_loss,train_end]
#训练模型
model.fit(x_train,y_train,validation_split=0.3,batch_size=60,epochs=20,callbacks=callback_list,verbose=0)
5.for循环的应用
除了用回调函数来指定训练过程中的操作,我们还可以用for循环来执行。
比如以下代码:
model.fit(x_train,y_trainbatch_size=60,epochs=200,verbose=0)
我们可以改成:
for i in range(10):
model.fit(x_train,y_trainbatch_size=60,epochs=20,verbose=0)
loss,acc = model.evaluate(x_test,y_test,verbose=0)
print('第%s轮测试后结果:' % epoch*(i+1))
print('############')
这样就可以每20轮打印下测试结果。
因此我们可以通过for来控制固定轮数后的各种操作。