這個問題在之前已經(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)入上面兩個文件中的任意一個文件中的方法都行。