Tensorflow训练模型越来越慢的2种解决方案
1解决方案
【方案一】
载入模型结构放在全局,即tensorflow会话外层。
'''载入模型结构:最关键的一步''' saver=tf.train.Saver() '''建立会话''' withtf.Session()assess: foriinrange(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() '''建立会话''' withtf.Session()assess: foriinrange(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-1510:55:29.009205:Itensorflow/core/platform/cpu_feature_guard.cc:141]YourCPUsupportsinstructionsthatthisTensorFlowbinarywasnotcompiledtouse:AVX2FMA step:0,timecost:1.8800880908966064 step:1,timecost:1.592250108718872 step:2,timecost:1.553826093673706 step:3,timecost:1.5687050819396973 step:4,timecost:1.5777575969696045 step:5,timecost:1.5908267498016357 step:6,timecost:1.5989274978637695 step:7,timecost:1.6078357696533203 step:8,timecost:1.6087186336517334 step:9,timecost:1.6123006343841553 step:10,timecost:1.6320762634277344 step:11,timecost:1.6317598819732666 step:12,timecost:1.6570467948913574 step:13,timecost:1.6584930419921875 step:14,timecost:1.6765813827514648 step:15,timecost:1.6751370429992676 step:16,timecost:1.7304580211639404 step:17,timecost:1.7583982944488525
【时间均衡】
2019-05-1513:03:49.394354:Itensorflow/core/common_runtime/gpu/gpu_device.cc:1115]CreatedTensorFlowdevice(/job:localhost/replica:0/task:0/device:GPU:1with7048MBmemory)->physicalGPU(device:1,name:TeslaP4,pcibusid:0000:00:0d.0,computecapability:6.1) step:0,timecost:1.9781079292297363 loss1:6.78,loss2:5.47,loss3:5.27,loss4:7.31,loss5:5.44,loss6:6.87,loss7:6.84 Totalloss:43.98,accuracy:0.04,steps:0,timecost:1.9781079292297363 step:1,timecost:0.09688425064086914 step:2,timecost:0.09693264961242676 step:3,timecost:0.09671926498413086 step:4,timecost:0.09688210487365723 step:5,timecost:0.09646058082580566 step:6,timecost:0.09669041633605957 step:7,timecost:0.09666872024536133 step:8,timecost:0.09651994705200195 step:9,timecost:0.09705543518066406 step:10,timecost:0.09690332412719727
3原因分析
(1)Tensorflow使用图结构构建系统,图结构中有节点(node)和边(operation),每次进行计算时会向图中添加边和节点进行计算或者读取已存在的图结构;
(2)使用图结构也是一把双刃之剑,可以加快计算和提高设计效率,但是,程序设计不合理会导向负面,使训练越来约慢;
(3)训练越来越慢是因为运行一次sess.run,向图中添加一次节点或者重新载入一次图结构,导致图中节点和边越来越多,计算参数也成倍增长;
(4)tf.train.Saver()就是载入图结构的类,因此设计训练程序时,若每执行一次跟新就使用该类载入图结构,自然会增加参数数量,必然导致训练变慢;
(5)因此,将载入图结构的类放在全局,即只载入一次图结构,其他时间只训练图结构中的参数,可保持原有的训练速度;
4总结
(1)设计训练网络,只载入一次图结构即可;
(2)tf.train.Saver()就是载入图结构的类,将该类的实例化放在全局,即会话外部,解决训练越来越慢。
以上这篇Tensorflow训练模型越来越慢的2种解决方案就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。