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程序的执行原理
Apr 11 Python
CentOS6.5设置Django开发环境
Oct 13 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
Python爬虫解析网页的4种方式实例及原理解析
Dec 30 Python
Python解释器及PyCharm工具安装过程
Feb 26 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 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
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
javascript iframe编程相关代码
2009/12/28 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
css配合jquery美化 select
2013/11/29 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
vue组件生命周期详解
2017/11/07 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
python模拟事件触发机制详解
2018/01/19 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
小橄榄树:Le Petit Olivier
2018/04/23 全球购物
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
个人思想理论学习的自我鉴定
2013/11/30 职场文书
《穷人》教学反思
2014/04/08 职场文书
干部考核评语
2014/04/29 职场文书
从事会计工作年限证明
2015/06/23 职场文书
《雷雨》教学反思
2016/02/20 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
sass 常用备忘案例详解
2021/09/15 HTML / CSS