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发送邮件附件以定时备份MySQL的教程
Apr 25 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
Apr 24 Python
tensorflow实现softma识别MNIST
Mar 12 Python
通过Python模块filecmp 对文件比较的实现方法
Jun 29 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
Jul 04 Python
pycharm重命名文件的方法步骤
Jul 29 Python
python conda操作方法
Sep 11 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
celery在python爬虫中定时操作实例讲解
Nov 27 Python
python 制作一个gui界面的翻译工具
May 14 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
php4的session功能评述(三)
2006/10/09 PHP
php学习笔记之 函数声明
2011/06/09 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
php实现短信发送代码
2015/07/05 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
2020/05/29 Javascript
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
Python工程师面试必备25条知识点
2018/01/17 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
MADE法国:提供原创设计师家具
2018/09/18 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
计算机网络毕业生自荐信
2013/10/01 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
小学语文复习计划
2015/01/19 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
办公室禁烟通知
2015/04/23 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS