這個問題在之前已經(jīng)有講解如何解決了抢肛,但是今天準備修改源碼的方式修復(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票罐,進而導(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)入上面兩個文件中的任意一個文件中的方法都行趁蕊。