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脚本来删除指定容量以上的文件的教程
May 04 Python
浅谈python中的占位符
Nov 09 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
对numpy中array和asarray的区别详解
Apr 17 Python
python实现批量图片格式转换
Jun 16 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
python Django里CSRF 对应策略详解
Aug 05 Python
Python线程条件变量Condition原理解析
Jan 20 Python
Python实现读取并写入Excel文件过程解析
May 27 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
python中pymysql包操作数据库方法
Apr 19 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
phpmyadmin的#1251问题
2006/11/25 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
JavaScript 变量基础知识
2009/11/07 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
js验证上传图片的方法
2015/05/12 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
jQuery事件详解
2017/02/23 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python threading模块操作多线程介绍
2015/04/08 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
简单了解Django模板的使用
2017/12/20 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
Spring @Enable模块驱动原理及使用实例
2020/06/23 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
企业读书活动总结
2014/06/30 职场文书
革命电影观后感
2015/06/18 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL
pandas进行数据输入和输出的方法详解
2022/03/23 Python
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS