美文网首页
load_model加载使用leaky_relu激活函数的网络报

load_model加载使用leaky_relu激活函数的网络报

作者: small瓜瓜 | 来源:发表于2021-07-31 19:10 被阅读0次

    这个问题在之前已经有讲解如何解决了,但是今天准备修改源码的方式修复bug。

    之前文章

    load_model加载使用'leaky_relu'激活bug处理

    报错的主要因为这个方法tensorflow.python.keras.activations.deserialize


    这个方法最后调用方法tensorflow.python.keras.utils.generic_utils.deserialize_keras_object

    红色虚线处就是报错的地方,代码是执行到obj = module_objects.get(object_name)赋值obj变量为None,进而导致了这个bug
    所以问题就出在module_objects这个字典对象中,回到上一个方法这个对象主要是
      globs = globals()
    
      # only replace missing activations
      advanced_activations_globs = advanced_activations.get_globals()
      for key, val in advanced_activations_globs.items():
        if key not in globs:
          globs[key] = val
    

    globals()是获取该文件的所有实例对象,按字典返回。
    执行该方法的文件是activations.py,按文件名这个应该包含leaky_relu激活函数,但是这个方法并没有。下面的advanced_activations.get_globals()是执行advanced_activations.py中的globals()方法,下面是源码截图(有折叠):


    这里并没有leaky_relu激活函数,只有LeakyRelu层类,所以上面的globs字典没有leaky_relu激活函数,因为advanced_activations.py文件是专门存放层的。所以这里我们需要修改源码让,activations.py中的globals()获取到leaky_relu激活函数,可以在activations.py编写leaky_relu激活函数方法,但是为了简单起见,这里选择直接导入其他文件中的leaky_relu方法,如下:

    导入上面两个文件中的任意一个文件中的方法都行。

    相关文章

      网友评论

          本文标题:load_model加载使用leaky_relu激活函数的网络报

          本文链接:https://www.haomeiwen.com/subject/yxehvltx.html