小编给大家分享一下keras中get_value运行越来越慢怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
keras深度学习框架中get_value函数运行越来越慢,内存消耗越来越大问题
问题描述
如上图所示,经过时间和内存消耗跟踪测试,发现是keras.backend.get_value()函数导致的程序越来越慢,而且严重的造成内存泄露;
查看该函数内部实现,发现一个主要核心是x.eval(会话=get_session ()) ,该语句可能是导致内存泄露和运行慢的核心语句;根据查看一些博文得到了运行得越来越慢的
<强>原因强>:<强>该x。eval函数会添加新的节点到tf的图中,而这也导致了tf的图越来越大,内存泄露;强>
解决方法
import tensorflow.keras.backend as K def get_my_session (gpu_fraction=0.1): ,,,& # 39;& # 39;& # 39;Assume that 你have 6 gb of GPU memory 以及want 用allocate ~ 2 gb # 39; & # 39; & # 39; ,,,num_threads =, os.environ.get (& # 39; OMP_NUM_THREADS& # 39;) ,,,gpu_options =, tf.GPUOptions (per_process_gpu_memory_fraction=gpu_fraction) ,,,if num_threads: ,,,,,,,return tf.Session (config=tf.ConfigProto ( ,,,,,,,,,,,gpu_options=gpu_options, intra_op_parallelism_threads=num_threads)) ,,,: ,,,,,,,return tf.Session (config=tf.ConfigProto (gpu_options=gpu_options)) K.set_session (get_my_session ())
如上图所示,我在使用tensorflow之前(也就是该工程文件前面),对会话进行自定义,然后用自定义的会话设定keras.backend.set_session ();
然后删除get_value()函数,直接用get_value()中所使用的执行语句x.eval(会话=get_my_session());这样这个添加节点导致内存泄露的核心语句x.eval()就使用的是该工程统一自定义,然后用<强> tf.reset_default_graph() 强>对图重置就可以了
即上图问题代码修改为:
output =, ctc_decode (y_pred input_length=input_length,) 时间=output 输出[0][0] 时间=out output.eval(会话=get_my_session ()) #,删除,K.get_value ([0] [0]) tf.reset_default_graph(), #,然后重置tf图,这句很关键
这样就解决了get_value()导致的越来越慢的问题;
个人认为:<强>这样可能就不会总是添加新的节点,导致tf图不断地无限变大;而是重复使用这一个自定义的节点。强>
<>强补充:tensorflow与keras之间版本问题引起get_session问题解决办法强>
1。产生报错原因
import tensorflow.keras.backend as K def __init__(自我,,* * kwargs): ,,,self.__dict__.update (self._defaults), #, set up default 价值 ,,,self.__dict__.update (kwargs), #,以及update with user 覆盖 ,,,self.class_names =, self._get_class () ,,,self.anchors =, self._get_anchors () ,,,self.sess =, K.get_session ()
报错如下:
get_session使用TensorFlow 2.0时不可用。
引用>意思是tf2.0没有get_session
2。解决方案1
import tensorflow.python.keras.backend as K 时间=sess K.get_session ()3。解决方案2
import tensorflow as tf 时间=sess tf.compat.v1.keras.backend.get_session ()之前一直采用方案1解决,感觉比较方便;但是解决方案1有其它属性会丢失问题
比如AttributeError:模块的keras.backend& # 39;没有属性image_dim_ordering
引用>以上是“keras中get_value运行越来越慢怎么办”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
keras中get_value运行越来越慢怎么办