Reputation: 113
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
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