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 类的继承实例详解
Mar 25 Python
Python命令行解析模块详解
Feb 01 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
Mar 05 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
Python3.6中Twisted模块安装的问题与解决
Apr 15 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
Python 复平面绘图实例
Nov 21 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
如何教少儿学习Python编程
Jul 10 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 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数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
html超链接打开窗口大小的方法
2013/03/05 Javascript
js charAt的使用示例
2014/02/18 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
Python验证企业工商注册码
2015/10/25 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
浅谈django channels 路由误导
2020/05/28 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
python+opencv实现车道线检测
2021/02/19 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
销售冠军获奖感言
2014/02/03 职场文书
励志演讲稿500字
2014/08/21 职场文书
旅游活动总结
2014/08/27 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
家属慰问信
2015/02/14 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
浅谈JavaScript作用域
2021/12/06 Javascript