我正在尝试使用 model.save()
保存我的 TensorFlow 模型,但是 - 我收到此错误。
此处提供了模型摘要: 模型摘要
变压器模型的代码:
def transformer(vocab_size, num_layers, units, d_model, num_heads, dropout, name="transformer"):
inputs = tf.keras.Input(shape=(None,), name="inputs")
dec_inputs = tf.keras.Input(shape=(None,), name="dec_inputs")
enc_padding_mask = tf.keras.layers.Lambda(
create_padding_mask, output_shape=(1, 1, None),
name='enc_padding_mask')(inputs)
# mask the future tokens for decoder inputs at the 1st attention block
look_ahead_mask = tf.keras.layers.Lambda(
create_look_ahead_mask,
output_shape=(1, None, None),
name='look_ahead_mask')(dec_inputs)
# mask the encoder outputs for the 2nd attention block
dec_padding_mask = tf.keras.layers.Lambda(
create_padding_mask, output_shape=(1, 1, None),
name='dec_padding_mask')(inputs)
enc_outputs = encoder(
vocab_size=vocab_size,
num_layers=num_layers,
units=units,
d_model=d_model,
num_heads=num_heads,
dropout=dropout,
)(inputs=[inputs, enc_padding_mask])
dec_outputs = decoder(
vocab_size=vocab_size,
num_layers=num_layers,
units=units,
d_model=d_model,
num_heads=num_heads,
dropout=dropout,
)(inputs=[dec_inputs, enc_outputs, look_ahead_mask, dec_padding_mask])
outputs = tf.keras.layers.Dense(units=vocab_size, name="outputs")(dec_outputs)
return tf.keras.Model(inputs=[inputs, dec_inputs], outputs=outputs, name=name)
我不明白为什么会出现此错误,因为模型训练得非常好。任何帮助,将不胜感激。
我的保存代码供参考:
print("Saving the model.")
saveloc = "C:/tmp/solar.h5"
model.save(saveloc)
print("Model saved to: " + saveloc + " succesfully.")
原文由 Shaheryar Sohail 发布,翻译遵循 CC BY-SA 4.0 许可协议
这不是一个错误,这是一个功能。
此错误让您知道 TF 无法保存您的模型,因为它无法加载它。
具体来说,它将无法重新实例化您的自定义
Layer
类:encoder
和decoder
。要解决这个问题, 只需根据您添加的新参数覆盖他们的
get_config
方法。例如,如果您的
encoder
类看起来像这样:那么你只需要覆盖这个方法:
当 TF 看到这个(对于两个类)时,您将能够保存模型。
因为现在加载模型时,TF 将能够从配置中重新实例化同一层。
Layer.from_config
的 源代码 可以更好地理解它的工作原理: