load_model加載使用leaky_relu激活函數(shù)的網(wǎng)絡(luò)報錯

這個問題在之前已經(jīng)有講解如何解決了,但是今天準(zhǔn)備修改源碼的方式修復(fù)bug。

之前文章

load_model加載使用'leaky_relu'激活bug處理

報錯的主要因為這個方法tensorflow.python.keras.activations.deserialize


這個方法最后調(diào)用方法tensorflow.python.keras.utils.generic_utils.deserialize_keras_object

紅色虛線處就是報錯的地方,代碼是執(zhí)行到obj = module_objects.get(object_name)賦值obj變量為None,進(jìn)而導(dǎo)致了這個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()是獲取該文件的所有實例對象,按字典返回。
執(zhí)行該方法的文件是activations.py,按文件名這個應(yīng)該包含leaky_relu激活函數(shù),但是這個方法并沒有。下面的advanced_activations.get_globals()是執(zhí)行advanced_activations.py中的globals()方法,下面是源碼截圖(有折疊):


這里并沒有leaky_relu激活函數(shù),只有LeakyRelu層類,所以上面的globs字典沒有leaky_relu激活函數(shù),因為advanced_activations.py文件是專門存放層的。所以這里我們需要修改源碼讓,activations.py中的globals()獲取到leaky_relu激活函數(shù),可以在activations.py編寫leaky_relu激活函數(shù)方法,但是為了簡單起見,這里選擇直接導(dǎo)入其他文件中的leaky_relu方法,如下:

導(dǎo)入上面兩個文件中的任意一個文件中的方法都行。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容