在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中进行模型训练时,计算每一步迭代所花费时间的方法相关推荐

  1. keras中的模型保存和加载

    tensorflow中的模型常常是protobuf格式,这种格式既可以是二进制也可以是文本.keras模型保存和加载与tensorflow不同,keras中的模型保存和加载往往是保存成hdf5格式. ...

  2. 在多模态模型训练时,如何合适地融合单模态损失

    在多模态模型训练时,如何合适地融合单模态损失 FesianXu 20220420 at Baidu Search Team 前言 文章[1]的作者发现在多模态分类模型中,经常出现最好的单模态模型比多模 ...

  3. pytorch(4)Pytorch模型训练时从CPU与GPU之间的转换

    1.如何进行迁移 使用Pytorch写的模型: 对模型和相应的数据使用.cuda()处理.通过这种方式,我们就可以将内存中的数据复制到GPU的显存中去.从而可以通过GPU来进行运算了. 另外一种方式, ...

  4. 模型训练时测试集上正确率大于训练集

    模型训练时测试集上正确率大于训练集 参考 模型在测试集的准确率大于训练集 神经网络与深度学习-验证集(测试集)准确率高于训练集准确率的原因 一.问题   近日再进行Point Cloud Transf ...

  5. 推荐系统实战中LR模型训练(二)

    背景: 上一篇推荐系统实战中LR模型训练(一) 中完成了LR模型训练的代码部分.本文中将详细讲解数据准备部分,即将文本数据数值化为稀疏矩阵的形式. 文本数据: 稀疏矩阵: 实现过程: 文本数据格式如下 ...

  6. darknet训练时计算mAP和测试计算mAP

    训练时计算相应的mAP值 ./darknet detector train cfg/coco.data yolov3.cfg yolov3.conv.137 -map 测试时计算相应的mAP值 To ...

  7. Tensorflow 2.x(keras)源码详解之第十章:keras中的模型保存与加载(详解Checkpointmd5模型序列化)

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  8. word打印机显示服务器脱机,电脑中打开word文件时总显示打印机没有响应的解决方法...

    我们经常会使用word来编辑文档,不过近日有不少小伙伴在电脑中打开word文档的时候,却总是显示"打印机没有响应,但是程序可以在没有打印机信息的情况下继续运行,是否继续等待打印机响应?&qu ...

  9. Keras中Sequential模型及方法详细总结

    Sequential 序贯模型 序贯模型是函数式模型的简略版,为最简单的线性.从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠. Keras实现了很多层,包括core核心层,Convolution卷 ...

  10. 推荐系统实战中LR模型训练(一)

    背景: 在"批量导入数据到Redis" 中已经介绍了将得到的itema item1:score1,item2:score2-批量导入到Redis数据库中.本文的工作是运用机器学习L ...

最新文章

  1. Facebook SDE onsite面经
  2. 数据挖掘十大经典算法之——K-Means 算法
  3. 深夜爆肝:万字长文3种语言实现Huffman树(强烈建议三连)
  4. android 年月日时分秒控件,Android 年月日时分秒时间选择器
  5. java nature_什麼是Eclipse項目的JavaEMFNature nature?
  6. 【网络编程】time_wait状态产生的原因,危害,如何避免
  7. 转: MySql数据引擎简介与选择方法
  8. CUDA——Windows上CUDA的安装教程
  9. 移动应用的黄金四分类
  10. 2017.0622.《计算机组成原理》-虚拟存储器和主存
  11. egg服务重启及child_process的使用
  12. 360se html怎么删除,删除360浏览器的方法 如何删除360浏览器?
  13. Redis源码之——跳表skiplist原理和源码调试
  14. MUI框架的基本使用
  15. java300集高淇老师学习笔记
  16. 零基础理财入门书籍分享
  17. 2015年度APP分类
  18. Android 热补丁动态修复
  19. c语言实验报告 订票系统,【C语言】火车订票系统
  20. 每日一佳——A Support Vector Method for Multivariate Performance Measures(Thorsten Joachims,ICML,2005)

热门文章

  1. 警告: A docBase E:/Tomcat/webapps/Test inside the host appBase has been specified, and will be ignored
  2. 硬盘变成Raw格式 与 移动硬盘报I/O错误问题
  3. 用户计算机MAC地址在哪看,怎么查看本机mac地址_电脑mac地址在哪里
  4. BlenderGIS:No ImageIO解决办法 天地图地图资源
  5. 腾讯地图 地图组件 缩放级别
  6. 计算机点击管理无效,win10开始菜单没反应,二种解决办法!
  7. Win10出现“你需要权限才能执行此操作”提示的解决方法--win7w.com
  8. 【WiFi】WiFi安全类型
  9. 使用FFMPEG 模仿微信拍视频
  10. Ubuntu系统中如何删除一个用户