Keras中进行模型训练时,计算每一步迭代所花费时间的方法
在keras中训练模型的时候,准备比较有无GPU的模型训练时间花费具体有多大,所以采用了在fit前后调用time.time()的方式计算。代码为:
import time
start = time.clock()history = model.fit(train_img, train_labels, epochs=10, batch_size=128)print(time.clock() - start)
注:在调用fit时发生的事情:网络开始在训练数据上进行迭代(每个小批量包含 128 个样本), 共迭代 10 次[在所有训练数据上迭代一次叫作一个轮次(epoch)]。 在每次迭代过程中,网络会计算批量损失相对于权重的梯度,并相应地更新权重。
在输出结果中发现:有无GPU的情况下相差不明显,但两者的运行日志明显差别巨大,准备一探究竟。
查找了以下原因,是因为fit采用的是异步执行的方式,如果想获取每一轮的fit时间,需要通过keras的回调函数 的方式进行获取。
如下所示,定义一个了 TimeHistory 回调函数,该回调函数记录了每一轮迭代所花费的时间,以及从训练开始到结束所花费的总时间:
import time
class TimeHistory(keras.callbacks.Callback):def on_train_begin(self, logs={}):self.times = []self.totaltime = time.time()def on_train_end(self, logs={}):self.totaltime = time.time() - self.totaltimedef on_epoch_begin(self, batch, logs={}):self.epoch_time_start = time.time()def on_epoch_end(self, batch, logs={}):self.times.append(time.time() - self.epoch_time_start)
TimeHistory回调函数的使用需要注意,callbacks参数虽然只有一个参数,然需要加[]
---- callbacks=[time_callback]
。
time_callback = TimeHistory()
history = model.fit(train_img, train_labels, epochs=10, batch_size=128, callbacks=[time_callback])print(time_callback.times)
print(time_callback.totaltime)
获取到的输出结果和训练时的输出结果类似,fit内部的输出结果为:
Epoch 1/10
60000/60000 [==============================] - 23s 383us/step - loss: 0.0132 - acc: 0.9954
Epoch 2/10
60000/60000 [==============================] - 29s 492us/step - loss: 0.0098 - acc: 0.9968
Epoch 3/10
60000/60000 [==============================] - 25s 413us/step - loss: 0.0090 - acc: 0.9967
Epoch 4/10
60000/60000 [==============================] - 22s 367us/step - loss: 0.0085 - acc: 0.9971
Epoch 5/10
60000/60000 [==============================] - 22s 369us/step - loss: 0.0106 - acc: 0.9962
Epoch 6/10
60000/60000 [==============================] - 22s 369us/step - loss: 0.0080 - acc: 0.9975
Epoch 7/10
60000/60000 [==============================] - 22s 369us/step - loss: 0.0080 - acc: 0.9971
Epoch 8/10
60000/60000 [==============================] - 22s 367us/step - loss: 0.0061 - acc: 0.9981
Epoch 9/10
60000/60000 [==============================] - 22s 369us/step - loss: 0.0058 - acc: 0.9979
Epoch 10/10
60000/60000 [==============================] - 22s 368us/step - loss: 0.0078 - acc: 0.9974
回调函数所返回的结果如下:
22.996684074401855, 29.496134281158447, 24.777568817138672, 22.015268325805664, 22.113263845443726, 22.137538194656372, 22.160048961639404, 22.03213620185852, 22.14749526977539, 22.077812433242798
可以看出这里的结果和上面的Epoch中输出的结果类似,其实Epoch的结果就是回调函数结果的四舍五入。
【其他】
使用中,自己犯了一个低级错误,见 Keras fit函数中传入回调函数,提示『TypeError: set_model() missing 1 required positional argument: ‘model’』错误
Keras中进行模型训练时,计算每一步迭代所花费时间的方法相关推荐
- keras中的模型保存和加载
tensorflow中的模型常常是protobuf格式,这种格式既可以是二进制也可以是文本.keras模型保存和加载与tensorflow不同,keras中的模型保存和加载往往是保存成hdf5格式. ...
- 在多模态模型训练时,如何合适地融合单模态损失
在多模态模型训练时,如何合适地融合单模态损失 FesianXu 20220420 at Baidu Search Team 前言 文章[1]的作者发现在多模态分类模型中,经常出现最好的单模态模型比多模 ...
- pytorch(4)Pytorch模型训练时从CPU与GPU之间的转换
1.如何进行迁移 使用Pytorch写的模型: 对模型和相应的数据使用.cuda()处理.通过这种方式,我们就可以将内存中的数据复制到GPU的显存中去.从而可以通过GPU来进行运算了. 另外一种方式, ...
- 模型训练时测试集上正确率大于训练集
模型训练时测试集上正确率大于训练集 参考 模型在测试集的准确率大于训练集 神经网络与深度学习-验证集(测试集)准确率高于训练集准确率的原因 一.问题 近日再进行Point Cloud Transf ...
- 推荐系统实战中LR模型训练(二)
背景: 上一篇推荐系统实战中LR模型训练(一) 中完成了LR模型训练的代码部分.本文中将详细讲解数据准备部分,即将文本数据数值化为稀疏矩阵的形式. 文本数据: 稀疏矩阵: 实现过程: 文本数据格式如下 ...
- darknet训练时计算mAP和测试计算mAP
训练时计算相应的mAP值 ./darknet detector train cfg/coco.data yolov3.cfg yolov3.conv.137 -map 测试时计算相应的mAP值 To ...
- Tensorflow 2.x(keras)源码详解之第十章:keras中的模型保存与加载(详解Checkpointmd5模型序列化)
大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...
- word打印机显示服务器脱机,电脑中打开word文件时总显示打印机没有响应的解决方法...
我们经常会使用word来编辑文档,不过近日有不少小伙伴在电脑中打开word文档的时候,却总是显示"打印机没有响应,但是程序可以在没有打印机信息的情况下继续运行,是否继续等待打印机响应?&qu ...
- Keras中Sequential模型及方法详细总结
Sequential 序贯模型 序贯模型是函数式模型的简略版,为最简单的线性.从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠. Keras实现了很多层,包括core核心层,Convolution卷 ...
- 推荐系统实战中LR模型训练(一)
背景: 在"批量导入数据到Redis" 中已经介绍了将得到的itema item1:score1,item2:score2-批量导入到Redis数据库中.本文的工作是运用机器学习L ...
最新文章
- Facebook SDE onsite面经
- 数据挖掘十大经典算法之——K-Means 算法
- 深夜爆肝:万字长文3种语言实现Huffman树(强烈建议三连)
- android 年月日时分秒控件,Android 年月日时分秒时间选择器
- java nature_什麼是Eclipse項目的JavaEMFNature nature?
- 【网络编程】time_wait状态产生的原因,危害,如何避免
- 转: MySql数据引擎简介与选择方法
- CUDA——Windows上CUDA的安装教程
- 移动应用的黄金四分类
- 2017.0622.《计算机组成原理》-虚拟存储器和主存
- egg服务重启及child_process的使用
- 360se html怎么删除,删除360浏览器的方法 如何删除360浏览器?
- Redis源码之——跳表skiplist原理和源码调试
- MUI框架的基本使用
- java300集高淇老师学习笔记
- 零基础理财入门书籍分享
- 2015年度APP分类
- Android 热补丁动态修复
- c语言实验报告 订票系统,【C语言】火车订票系统
- 每日一佳——A Support Vector Method for Multivariate Performance Measures(Thorsten Joachims,ICML,2005)
热门文章
- 警告: A docBase E:/Tomcat/webapps/Test inside the host appBase has been specified, and will be ignored
- 硬盘变成Raw格式 与 移动硬盘报I/O错误问题
- 用户计算机MAC地址在哪看,怎么查看本机mac地址_电脑mac地址在哪里
- BlenderGIS:No ImageIO解决办法 天地图地图资源
- 腾讯地图 地图组件 缩放级别
- 计算机点击管理无效,win10开始菜单没反应,二种解决办法!
- Win10出现“你需要权限才能执行此操作”提示的解决方法--win7w.com
- 【WiFi】WiFi安全类型
- 使用FFMPEG 模仿微信拍视频
- Ubuntu系统中如何删除一个用户