juggler92
juggler92

Reputation: 113

How to save/load model with intermediate outputs

I'm writting autoencoder in Keras:

inputs = Input((n_channels,))
l1 = Dense(40, activation="relu")(inputs)
l2 = Dense(19)(l1)
l3 = Dense(40, activation="relu")(l2)
training_layer = Dense(n_channels)(l3)
unify_layer = Model(inputs=inputs, outputs=l2)
training_layer = Model(inputs=inputs, outputs=training_layer)

I use training_layer for training, and unify_layer for predicting, so when I continue learning after saving it, I'd like to have access to both endpoints.

[Edit due to Marcin's comment]Model.save allows me save only one model. When I call:

unify_layer.save("unify")
training_layer.save("training")

And then

unify_layer = load_model("unify")
training_layer = load_model("training")

Two layer are no more linked i.e. when I train training_layer, unify_layer isn't trained.

Upvotes: 2

Views: 259

Answers (1)

juggler92
juggler92

Reputation: 113

Oh, I actually can use save_weights and load_weights method:

class Autoencoder():
    def __init__(self):
        inputs = Input((n_channels,))
        l1 = Dense(40, activation="relu")(inputs)
        l2 = Dense(19)(l1)
        l3 = Dense(40, activation="relu")(l2)
        training_layer = Dense(n_channels)(l3)
        self.unify_layer = Model(inputs=inputs, outputs=l2)
        self.training_layer = Model(inputs=inputs, outputs=training_layer)

    def save(self, filename):
        self.unify_layer.save_weights("unify_" + filename)
        self.training_layer.save_weights("training_" + filename)

    def load(self, filename):
        self.unify_layer.load_weights("unify_" + filename)
        self.training_layer.load_weights("training_" + filename)

Upvotes: 3

Related Questions