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

时间:2018-06-13 12:48:01

标签: python keras

直到Keras版本2.1.6一个人能够"转换" accessing the underlying model.model的功能模型的顺序模型。 从版本2.2.0开始,这是no longer possible

还能以其他方式完成吗?

(如果你想知道我为什么要做这样的事情,我会依赖于这种转换维持a library。:wink:)

2 个答案:

答案 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函数之类的额外功能,以简化使用。您只需忽略这些额外的功能,就可以像使用功能模型一样使用该对象。