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 21 Python
go和python调用其它程序并得到程序输出
Feb 10 Python
20个常用Python运维库和模块
Feb 12 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
Python基础学习之类与实例基本用法与注意事项详解
Jun 17 Python
Python使用Tkinter实现滚动抽奖器效果
Jan 06 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 Python
Python pyecharts绘制条形图详解
Apr 02 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
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
PHP 文件上传限制问题
2019/09/01 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
Python实现文件复制删除
2016/04/19 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
python可视化实现KNN算法
2019/10/16 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
如何学习Python time模块
2020/06/03 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
如何撰写岗位职责
2014/02/01 职场文书
小学语文教学反思
2014/02/10 职场文书
软件售后服务承诺书
2014/05/21 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
税务职业生涯规划书范文
2014/09/16 职场文书
学习心理学心得体会
2016/01/22 职场文书
Ruby处理CSV数据方法详解
2022/04/18 Ruby