我无法加载我训练和保存的 nn 模型

Ali*_*ati 2 anaconda google-colaboratory tf.keras

我使用迁移学习来训练模型。基本模型是efficientNet。你可以在这里读更多关于它的内容

from tensorflow import keras
from keras.models import Sequential,Model
from keras.layers import Dense,Dropout,Conv2D,MaxPooling2D, 
Flatten,BatchNormalization, Activation
from keras.optimizers import RMSprop , Adam ,SGD
from keras.backend import sigmoid
Run Code Online (Sandbox Code Playgroud)

激活函数

SwishActivation 类(激活):

def __init__(self, activation, **kwargs):
    super(SwishActivation, self).__init__(activation, **kwargs)
    self.__name__ = 'swish_act'

def swish_act(x, beta = 1):
    return (x * sigmoid(beta * x))

from keras.utils.generic_utils import get_custom_objects
from keras.layers import Activation
get_custom_objects().update({'swish_act': SwishActivation(swish_act)})
Run Code Online (Sandbox Code Playgroud)

模型定义

model = enet.EfficientNetB0(include_top=False, input_shape=(150,50,3), pooling='avg', weights='imagenet')
Run Code Online (Sandbox Code Playgroud)

向 B0 添加 2 个全连接层。

x = model.output

x = BatchNormalization()(x)
x = Dropout(0.7)(x)

x = Dense(512)(x)
x = BatchNormalization()(x)
x = Activation(swish_act)(x)
x = Dropout(0.5)(x)

x = Dense(128)(x)
x = BatchNormalization()(x)
x = Activation(swish_act)(x)

x = Dense(64)(x)

x = Dense(32)(x)

x = Dense(16)(x)

# Output layer
predictions = Dense(1, activation="sigmoid")(x)

model_final = Model(inputs = model.input, outputs = predictions)

model_final.summary()
Run Code Online (Sandbox Code Playgroud)

我使用以下方法保存它:

from tensorflow import keras
from keras.models import Sequential,Model
from keras.layers import Dense,Dropout,Conv2D,MaxPooling2D, 
Flatten,BatchNormalization, Activation
from keras.optimizers import RMSprop , Adam ,SGD
from keras.backend import sigmoid
Run Code Online (Sandbox Code Playgroud)

我尝试加载它时收到以下错误:

def __init__(self, activation, **kwargs):
    super(SwishActivation, self).__init__(activation, **kwargs)
    self.__name__ = 'swish_act'

def swish_act(x, beta = 1):
    return (x * sigmoid(beta * x))

from keras.utils.generic_utils import get_custom_objects
from keras.layers import Activation
get_custom_objects().update({'swish_act': SwishActivation(swish_act)})
Run Code Online (Sandbox Code Playgroud)

Ham*_*mad 5

我在尝试通过加载保存的模型进行推理时遇到了同样的错误。然后我也将effiecientNet库导入到推理笔记本中,错误就消失了。我的导入命令如下所示:

import efficientnet.keras as efn
Run Code Online (Sandbox Code Playgroud)

(请注意,如果您尚未安装 effiecientNet(不太可能),您可以使用!pip install efficientnet命令来安装。)