我正在尝试使用来保存我的TensorFlow模型model.save()
-我收到此错误。
此处提供了模型摘要:
模型摘要
变压器模型的代码:
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.")
这不是一个错误,这是一个功能。
此错误使您知道TF无法保存模型,因为它无法加载模型。
具体来说,它将无法重新实例化您的自定义Layer
类:
encoder
和
decoder
。
要解决此问题, 只需
get_config
根据您添加的新参数覆盖其方法。
层配置是包含层配置的Python字典(可序列化)。稍后可以从此配置中重新实例化同一层(没有经过训练的权重)。
例如,如果您的encoder
班级看起来像这样:
class encoder(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
的源代码可以更好地了解其工作方式:
@classmethod
def from_config(cls, config):
return cls(**config)
问题内容: 我正在尝试在JBoss 5.1.0的WAR应用程序中部署一些Web服务。 我已经使用JAX-WS工具从现有的wsdl中创建了源文件。这创建了服务文件和带注释的@XmlType的小包,它们将充当请求和响应包装器。 此类在JBoss 4.2.3上运行良好,但是当移至JBoss 5.1.0时,出现此异常。 java.lang.UnsupportedOperationException:set
问题内容: 我正在阅读“深入Python”,并在有关类的章节中给出了以下示例: 然后作者说,如果要覆盖该方法,则必须使用正确的参数显式调用父方法。 如果该班有一个以上的祖先班怎么办? 我是否必须显式调用所有祖先类的方法? 另外,我是否必须对要覆盖的其他任何方法执行此操作? 问题答案: 关于子类-超类调用,这本书有些过时了。在子类化内置类方面也有些过时。 如今看起来像这样: 请注意以下几点: 我们可
问题内容: 是否有一种标准方法可以在Swift中制作“纯虚函数”,即。一个 必须 由每个子类中被覆盖,并且,如果不是的话,将导致编译时错误? 问题答案: 您有两种选择: 将超类定义为协议而不是类 Pro :编译时检查每个“子类”(不是实际的子类)是否实现了所需的方法 缺点 :“超类”(协议)无法实现方法或属性 2.声明该方法的超级版本 例: Pro :可以在超类中实现方法和属性 缺点 :不检查编译
我有一个图像,我想覆盖在地图上的特定位置,看起来像当前静态地图图像服务没有提供任何参数传递。
在苹果自带地图和百度地图上覆盖一层图片,图片可以随地图缩放移动。关键就是自定义Overlay和OverlayView。 作者说:实在无力吐槽了,百度地图iOS SDK中的静态库文件居然都是10M !由于过大上传不了,亲们自行去 http://developer.baidu.com/map/sdk-ios.htm 按提示添加SDK吧!至于基于百度地图的自定义Overlay和OverlayView 记
问题内容: 创建自己的Activity子类时,我们将覆盖一些基本的Activity生命周期功能。 我们 必须 在其中哪些方法中称为超级实现, 应该 在哪里以及 只有什么好方法 ? 方法列表不是最终的,请随时添加更多功能,在哪里应该知道该怎么做。 问题答案: 必须: 应该/不应该:( 调用超类方法可能会有所帮助,除非您自己管理活动的状态或故意更改活动的行为-在这种情况下可能是有害的) 实际上,重写任