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小技巧之批量抓取美女图片
Jun 06 Python
python3.5使用tkinter制作记事本
Jun 20 Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 Python
Atom的python插件和常用插件说明
Jul 08 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
Mar 11 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
解决pycharm同一目录下无法import其他文件
Feb 12 Python
Python的Tqdm模块实现进度条配置
Feb 24 Python
Python自然语言处理之切分算法详解
Apr 25 Python
Django与数据库交互的实现
Jun 03 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 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速成大法
2015/01/30 PHP
php导入模块文件分享
2015/03/17 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
简单PHP会话(session)说明介绍
2016/08/21 PHP
JS Timing
2007/04/21 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
简单介绍Python中的struct模块
2015/04/28 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
计算机毕业大学生推荐信
2013/12/01 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
财务会计岗位职责
2015/02/03 职场文书
农村党员干部承诺书
2015/05/04 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
《莫泊桑拜师》教学反思
2016/02/22 职场文书
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript
在 Python 中利用 Pool 进行多线程
2022/04/24 Python