使用 Keras 2.2.0 将顺序模型转换为功能模型



在Keras版本2.1.6之前,人们能够通过访问底层model.model将顺序模型"转换"为功能模型。 从版本 2.2.0 开始,这不再可能。

还能用其他方式完成吗?

(如果你想知道我为什么要做这样的事情,我正在维护一个依赖于这种转换的库。

我现在无法测试此解决方案,因为我没有安装 Keras 2.2.0,但我认为它应该可以工作。假设您的顺序模型存储在seqmodel

from keras import layers, models
input_layer = layers.Input(batch_shape=seqmodel.layers[0].input_shape)
prev_layer = input_layer
for layer in seqmodel.layers:
prev_layer = layer(prev_layer)
funcmodel = models.Model([input_layer], [prev_layer])

这应该给出等效的功能模型。如果我弄错了,请告诉我。

不再需要转换,因为Sequential现在是Model的子类,因此它已经是一个模型。在它曾经是一个包装器之前,大概这就是你问的原因。从源代码:

class Sequential(Model):
# ...
@property
def model(self):
# Historically, `Sequential` was once
# implemented as a wrapper for `Model` which maintained
# its underlying `Model` as the `model` property.
# We keep it for compatibility reasons.
warnings.warn('`Sequential.model` is deprecated. '
'`Sequential` is a subclass of `Model`, you can '
'just use your `Sequential` instance directly.')
return self

无论您可以使用模型做什么,也可以使用Sequential,它只会添加额外的功能,例如.add易于使用的功能。您可以忽略这些额外的函数,并像使用函数模型一样使用该对象。

最新更新