出现此错误的原因是,无法序列化模型中的自定义层对象。解决方法是定义一个新的类继承自自定义层,并实现get_config()和from_config()方法。get_config()方法返回层的参数配置,from_config()方法使用这些参数重新创建层。将新的类用于替换原始的自定义层即可。示例代码如下:
class CustomLayer(tf.keras.layers.Layer):
def __init__(self, units, **kwargs):
self.units = units
super().__init__(**kwargs)
def build(self, input_shape):
self.kernel = self.add_weight(name='kernel',
shape=(input_shape[1], self.units),
initializer='uniform',
trainable=True)
def call(self, inputs):
return tf.matmul(inputs, self.kernel)
def get_config(self):
config = super().get_config().copy()
config.update({'units': self.units})
return config
@classmethod
def from_config(cls, config):
return cls(**config)
# 创建一个包含自定义层的模型,并编译。
inputs = tf.keras.Input(shape=(1,))
x = CustomLayer(64)(inputs)
outputs = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(inputs, outputs)
model.compile(optimizer='adam',
loss='mse',
metrics=['mae'])
# 将新的类用于替换原始的自定义层,并保存模型。
model.layers[1] = CustomLayer.from_config(model.layers[1].get_config())
model.save('model.h5')
下一篇:保存宝可梦图鉴的状态