Tensorflow训练模型越来越慢的2种解决方案


Posted in Python onFebruary 07, 2020

1 解决方案

【方案一】

载入模型结构放在全局,即tensorflow会话外层。

'''载入模型结构:最关键的一步'''
saver = tf.train.Saver()
'''建立会话'''
with tf.Session() as sess:
 for i in range(STEPS):
 '''开始训练'''
 _, loss_1, acc, summary = sess.run([train_op_1, train_loss, train_acc, summary_op], feed_dict=feed_dict)
 '''保存模型'''
 saver.save(sess, save_path="./model/path", i)

【方案二】

在方案一的基础上,将模型结构放在图会话的外部。

'''预测值'''
train_logits= network_model.inference(inputs, keep_prob)
'''损失值'''
train_loss = network_model.losses(train_logits)
'''优化'''
train_op = network_model.train(train_loss, learning_rate)
'''准确率'''
train_acc = network_model.evaluation(train_logits, labels)
'''模型输入'''
feed_dict = {inputs: x_batch, labels: y_batch, keep_prob: 0.5}
'''载入模型结构'''
saver = tf.train.Saver()
'''建立会话'''
with tf.Session() as sess:
 for i in range(STEPS):
 '''开始训练'''
 _, loss_1, acc, summary = sess.run([train_op_1, train_loss, train_acc, summary_op], feed_dict=feed_dict)
 '''保存模型'''
 saver.save(sess, save_path="./model/path", i)

2 时间测试

通过不同方法测试训练程序,得到不同的训练时间,每执行一次训练都重新载入图结构,会使每一步的训练时间逐次增加,如果训练步数越大,后面训练速度越来越慢,最终可导致图爆炸,而终止训练。

【时间累加】

2019-05-15 10:55:29.009205: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
step: 0, time cost: 1.8800880908966064
step: 1, time cost: 1.592250108718872
step: 2, time cost: 1.553826093673706
step: 3, time cost: 1.5687050819396973
step: 4, time cost: 1.5777575969696045
step: 5, time cost: 1.5908267498016357
step: 6, time cost: 1.5989274978637695
step: 7, time cost: 1.6078357696533203
step: 8, time cost: 1.6087186336517334
step: 9, time cost: 1.6123006343841553
step: 10, time cost: 1.6320762634277344
step: 11, time cost: 1.6317598819732666
step: 12, time cost: 1.6570467948913574
step: 13, time cost: 1.6584930419921875
step: 14, time cost: 1.6765813827514648
step: 15, time cost: 1.6751370429992676
step: 16, time cost: 1.7304580211639404
step: 17, time cost: 1.7583982944488525

【时间均衡】

2019-05-15 13:03:49.394354: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:1 with 7048 MB memory) -> physical GPU (device: 1, name: Tesla P4, pci bus id: 0000:00:0d.0, compute capability: 6.1)
step: 0, time cost: 1.9781079292297363
loss1:6.78, loss2:5.47, loss3:5.27, loss4:7.31, loss5:5.44, loss6:6.87, loss7: 6.84
Total loss: 43.98, accuracy: 0.04, steps: 0, time cost: 1.9781079292297363
step: 1, time cost: 0.09688425064086914
step: 2, time cost: 0.09693264961242676
step: 3, time cost: 0.09671926498413086
step: 4, time cost: 0.09688210487365723
step: 5, time cost: 0.09646058082580566
step: 6, time cost: 0.09669041633605957
step: 7, time cost: 0.09666872024536133
step: 8, time cost: 0.09651994705200195
step: 9, time cost: 0.09705543518066406
step: 10, time cost: 0.09690332412719727

3 原因分析

(1) Tensorflow使用图结构构建系统,图结构中有节点(node)和边(operation),每次进行计算时会向图中添加边和节点进行计算或者读取已存在的图结构;

(2) 使用图结构也是一把双刃之剑,可以加快计算和提高设计效率,但是,程序设计不合理会导向负面,使训练越来约慢;

(3) 训练越来越慢是因为运行一次sess.run,向图中添加一次节点或者重新载入一次图结构,导致图中节点和边越来越多,计算参数也成倍增长;

(4) tf.train.Saver()就是载入图结构的类,因此设计训练程序时,若每执行一次跟新就使用该类载入图结构,自然会增加参数数量,必然导致训练变慢;

(5) 因此,将载入图结构的类放在全局,即只载入一次图结构,其他时间只训练图结构中的参数,可保持原有的训练速度;

4 总结

(1) 设计训练网络,只载入一次图结构即可;

(2) tf.train.Saver()就是载入图结构的类,将该类的实例化放在全局,即会话外部,解决训练越来越慢。

以上这篇Tensorflow训练模型越来越慢的2种解决方案就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现二叉搜索树
Feb 03 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
Sep 30 Python
从请求到响应过程中django都做了哪些处理
Aug 01 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
Dec 21 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
在 Python 中接管键盘中断信号的实现方法
Feb 04 Python
python如何把字符串类型list转换成list
Feb 18 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
Python DES加密实现原理及实例解析
Jul 17 Python
Python 合并拼接字符串的方法
Jul 28 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
详解python itertools功能
Feb 07 #Python
Python中itertools的用法详解
Feb 07 #Python
Python转换itertools.chain对象为数组的方法
Feb 07 #Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 #Python
python十进制转二进制的详解
Feb 07 #Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 #Python
python实现ip地址的包含关系判断
Feb 07 #Python
You might like
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
Python+django实现简单的文件上传
2016/08/17 Python
Python Flask基础教程示例代码
2018/02/07 Python
python实现最大优先队列
2019/08/29 Python
python 实现多维数组转向量
2019/11/30 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
Python求凸包及多边形面积教程
2020/04/12 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
党员自我批评与反省材料
2014/02/10 职场文书
培训协议书范本
2014/04/22 职场文书
法人授权委托书样本
2014/09/19 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
我的1919观后感
2015/06/03 职场文书
小学运动会加油词
2015/07/18 职场文书