直到Keras版本2.1.6一个人能够"转换" accessing the underlying model.model
的功能模型的顺序模型。
从版本2.2.0开始,这是no longer possible。
还能以其他方式完成吗?
(如果你想知道我为什么要做这样的事情,我会依赖于这种转换维持a library。:wink:)
答案 0 :(得分:7)
由于我没有安装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])
这应该给出等效的功能模型。让我知道我是否记错了。
答案 1 :(得分:2)
不再需要转换,因为Sequential
现在是Model
的子类,因此它已经是模型。在以前它曾经是包装器之前,这可能就是您要问的原因。来自source code:
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
函数之类的额外功能,以简化使用。您只需忽略这些额外的功能,就可以像使用功能模型一样使用该对象。