Tobias Hermann
Tobias Hermann

Reputation: 10926

Conversion of a sequential model to a functional model with Keras 2.2.0

Up to Keras version 2.1.6 one was able to "convert" a sequential model to a functional model by accessing the underlying model.model. Since version 2.2.0 this is no longer possible.

Can it still be done in some other way?

(In case you wonder why I would like to do something like this, I'm maintaining a library that relies on this conversion. :wink:)

Upvotes: 13

Views: 4056

Answers (2)

nuric
nuric

Reputation: 11225

There is no need for conversion anymore because Sequential is now a subclass of Model hence it is already a model. Before it used to be a wrapper presumably that is why you are asking. From the 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

Whatever you can do with a model you can also do with Sequential, it only adds extra functionality like .add function for ease of use. You can just ignore those extra functions and use the object as if it's a functional model.

Upvotes: 3

today
today

Reputation: 33410

I can't test this solution right now since I don't have Keras 2.2.0 installed, but I think it should work. Let's assume your sequential model is stored in 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])

This should give the equivalent functional model. Let me know if I am mistaken.

Upvotes: 20

Related Questions