这不是一个错误,这是一个功能。
此错误使您知道TF无法保存模型,因为它无法加载模型。
具体来说,它将无法重新实例化您的自定义
Layer类:
enprer
和
deprer
。
要解决此问题, 只需get_config
根据您添加的新参数覆盖其方法。
层配置是包含层配置的Python字典(可序列化)。稍后可以从此配置中重新实例化同一层(没有经过训练的权重)。
例如,如果您的
enprer班级看起来像这样:
class enprer(tf.keras.layers.Layer): def __init__( self, vocab_size, num_layers, units, d_model, num_heads, dropout, **kwargs, ): super().__init__(**kwargs) self.vocab_size = vocab_size self.num_layers = num_layers self.units = units self.d_model = d_model self.num_heads = num_heads self.dropout = dropout # Other methods etc.
那么您只需要重写此方法:
def get_config(self): config = super().get_config().copy() config.update({ 'vocab_size': self.vocab_size, 'num_layers': self.num_layers, 'units': self.units, 'd_model': self.d_model, 'num_heads': self.num_heads, 'dropout': self.dropout, }) return config当TF看到这一点(针对两个类)时,您将能够保存模型。
因为现在加载模型时,TF将能够从config重新实例化同一层。
Layer.from_config
的源代码可以更好地了解其工作方式:
@classmethoddef from_config(cls, config): return cls(**config)



