在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
易于使用的功能。您可以忽略这些额外的函数,并像使用函数模型一样使用该对象。