keras中get_value运行越来越慢怎么办

  介绍

小编给大家分享一下keras中get_value运行越来越慢怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

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运行越来越慢怎么办