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新手实现2048小游戏
Mar 31 Python
python负载均衡的简单实现方法
Feb 04 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
浅谈python中requests模块导入的问题
May 18 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
flask框架视图函数用法示例
Jul 19 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
python3正则提取字符串里的中文实例
Jan 31 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 Python
Python中的特殊方法以及应用详解
Sep 20 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来处理多个提交任务
2006/10/09 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
PHP 远程关机实现代码
2009/11/10 PHP
php读取文件内容的几种方法详解
2013/06/26 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
pyenv命令管理多个Python版本
2017/03/26 Python
Python队列的定义与使用方法示例
2017/06/24 Python
python编写分类决策树的代码
2017/12/21 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
欧洲最大的化妆品连锁公司:Douglas道格拉斯
2017/05/06 全球购物
协议书格式
2014/04/23 职场文书
中秋晚会策划方案
2014/06/12 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
房产证明范本
2015/06/19 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
Python 正则模块详情
2021/11/02 Python