keras训练


fit(self, x, y, batch_size=32, nb_epoch=10, verbose=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次。Keras中nb开头的变量均为"number of"的意思
5. verbose:日志显示,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_weights)的tuple,是指定的验证集。此参数将覆盖validation_spilt。
9. shuffle:布尔值,表示是否在训练过程中每个epoch前随机打乱输入样本的顺序。
10. class_weight:字典,将不同的类别映射为不同的权值,该参数用来在训练过程中调整损失函数(只能用于训练)。该参数在处理非平衡的训练数据(某些类的训练样本数很少)时,可以使得损失函数对样本数不足的数据更加关注。
11. sample_weight:权值的numpy array,用于在训练时调整损失函数(仅用于训练)。可以传递一个1D的与样本等长的向量用于对样本进行1对1的加权,或者在面对时序数据时,传递一个的形式为(samples,sequence_length)的矩阵来为每个时间步上的样本赋不同的权。这种情况下请确定在编译模型时添加了sample_weight_mode='temporal'。

fit函数返回一个History的对象,其History.history属性记录了损失函数和其他指标的数值随epoch变化的情况,如果有验证集的话,也包含了验证集的这些指标变化情况。


保存模型结构、训练出来的权重、及优化器状态


keras 的 callback参数可以帮助我们实现在训练过程中的适当时机被调用。实现实时保存训练模型以及训练参数。

keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1
)1. filename:字符串,保存模型的路径
2. monitor:需要监视的值
3. verbose:信息展示模式,0或1
4. save_best_only:当设置为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数

当验证损失不再继续降低时,如何中断训练?当监测值不再改善时中止训练


用EarlyStopping回调函数

from keras.callbacksimport EarlyStopping keras.callbacks.EarlyStopping(monitor='val_loss', patience=0, verbose=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. verbose:信息展示模式
4. mode:‘auto’,‘min’,‘max’之一,在min模式下,如果检测值停止下降则中止训练。在max模式下,当检测值不再上升则停止训练。

学习率动态调整1


keras.callbacks.LearningRateScheduler(schedule)
schedule:函数,该函数以epoch号为参数(从0算起的整数),返回一个新学习率(浮点数)
也可以让keras自动调整学习率

keras.callbacks.ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.1,
    patience=10,
    verbose=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倍的学习率常常能获得较好的效果


学习率动态2


def step_decay(epoch):initial_lrate = 0.01drop = 0.5epochs_drop = 10.0lrate = 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=False)
model.fit(train_set_x, train_set_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


如何记录每一次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_set_x,train_set_y,batch_size=256,shuffle=True,nb_epoch=nb_epoch,validation_split=0.1)
with open('log_sgd_big_32.txt','w') as f:f.write(str(hist.history))

示例,多个回调函数用逗号隔开


# checkpoint
checkpointer = ModelCheckpoint(filepath="./checkpoint.hdf5", verbose=1)
# learning rate adjust dynamic
lrate = ReduceLROnPlateau(min_lr=0.00001)answer.compile(optimizer='rmsprop', loss='categorical_crossentropy',metrics=['accuracy'])
# Note: you could use a Graph model to avoid repeat the input twice
answer.fit([inputs_train, queries_train, inputs_train], answers_train,batch_size=32,nb_epoch=5000,validation_data=([inputs_test, queries_test, inputs_test], answers_test),callbacks=[checkpointer, lrate]
)

keras回调函数中的Tensorboard


keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0,  write_graph=True, write_images=True)
tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)
...
model.fit(...inputs and parameters..., callbacks=[tbCallBack])
tensorboard --logdir path_to_current_dir/Graph 

或者

from keras.callbacks import TensorBoardtensorboard = TensorBoard(log_dir='./logs', histogram_freq=0,write_graph=True, write_images=False)
# 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])

https://stackoverflow.com/questions/42112260/how-do-i-use-the-tensorboard-callback-of-keras


参考文献


http://blog.csdn.net/u010159842/article/details/54602217
用Keras搞一个阅读理解机器人
回调函数Callbacks
Keras中文文档
深度学习框架Keras使用心得

keras中的回调函数相关推荐

  1. keras中重要的函数用法及参数详解

    1.Dense(全连接层) keras.layers.core.Dense ( units, activation=None, use_bias=True, kernel_initializer='g ...

  2. Java中的回调函数学习-深入浅出

    Java中的回调函数一般来说分为下面几步: 声明回调函数的统一接口interface A.包括方法callback(); 在调用类caller内将该接口设置为私有成员private A XXX; 在c ...

  3. 理解与使用Javascript中的回调函数

    在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被"存储"在变量中,能作为函数参数被传递,能在函数中被创建, ...

  4. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  5. 关于javascript中的回调函数

    关于javascript中的回调函数 原文地址:http://blog.csdn.net/sicluoyi/article/details/1737969 考虑一个这样的例子: 假如某个项目的底层和高 ...

  6. 【JavaScript】理解与使用Javascript中的回调函数

    在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被"存储"在变量中,能作为函数参数被传递,能在函数中被创建, ...

  7. memcpy函数_如何理解c语言中的回调函数

    在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 这段话不是那么好理解,不同语言实现回调的方式有些许不 ...

  8. 什么是JavaScript中的回调函数?

    This article gives a brief introduction to the concept and usage of callback functions in the JavaSc ...

  9. vue 执行函数this_在vue中使用回调函数,this调用无效的解决

    let self = this //使用新变量替换this,以免this无效 //updatestudentinfotoserver是一个将本身部分数据异步上传的接口,接收三个参数,其中第一个是数据, ...

最新文章

  1. python函数模块概念_python中模块和包的概念
  2. LeetCode --Search Insert Position
  3. efcore调用函数_如何在EF Core 使用存储过程
  4. SAP CRM WebClient UI的配置存储数据库表
  5. tbb flow graph node types
  6. linux自动应答,08. 创建 ks.cfg自动应答文件
  7. jsp,servlet中文乱码问题
  8. Java普通工程转换成标准的maven工程
  9. python---单元测试
  10. HDU 5666 Segment 数论+大数
  11. java socket - 传递对象
  12. vins 解读_VINS 中的 IMU 预积分推导和代码解读
  13. 迅雷太难用了,可以换其他的下载软件
  14. 按蚂蚁金服面试不过,就因为不会RPC服务超时排查思路?
  15. win10升级补丁_干掉烦人的win10升级助手gwx
  16. 用 construct 2 制作简易弹幕游戏
  17. 基数排序-LSD-golang
  18. python获取列表中某个元素个数_如何获取列表中的元素数?
  19. [渝粤教育] 天水师范学院 地质与地貌学 参考 资料
  20. 吴恩达深度学习笔记(10)-更多的导数讲解

热门文章

  1. stream() 求和_Java教程:Java8统计list中指定属性的最大、最小、平均值、求和
  2. Minimum Inversion Number HDU - 1394(权值线段树/树状数组)
  3. python使用redis教程 敲黑板划重点
  4. java fx 插件,JAVA FX 應用程序基礎
  5. mysql 5.5 主从同步_Windows下mysql5.5主从同步
  6. ServletContext接口
  7. pdmreader读写注册表失败_用PDMreader
  8. php yii框架源码,yii 源码解读
  9. 深度学习之循环神经网络(11-a)LSTM情感分类问题代码
  10. 『ACM-数据结构』信息竞赛进阶指南--线段树