JayJay81
JayJay81

Reputation: 203

Saving the specific layer from within a sequential Keras model

I am building an auto-encoder and training the model so the targeted output is the same as the input.

I am using a sequential Keras model. When I use model.predict I would like it to export the array from a specific layer (Dense256) not the output.

This is my current model:

model = Sequential()
model.add(Dense(4096, input_dim = x.shape[1], activation = 'relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(4096, activation='relu'))
model.add(Dense(x.shape[1], activation ='sigmoid'))
model.compile(loss = 'mean_squared_error', optimizer = 'adam')
history = model.fit(data_train,data_train,
                    verbose=1,
                    epochs=10, 
                    batch_size=256,
                    shuffle=True,
                    validation_data=(data_test, data_test))

Upvotes: 2

Views: 2313

Answers (2)

Eric Fournie
Eric Fournie

Reputation: 1372

layer.get_weights() returns the weights of a layer as a numpy array which can then be saved, for example with np.save.

To set the weights from a numpy array, layer.set_weights(weights) can be used.

You can access your layer either by name (model.get_layer(LAYER_NAME) or by its number (model.layers[LAYER_INDEX]).

Upvotes: 1

Ioannis Nasios
Ioannis Nasios

Reputation: 8527

After training, create a new model (model2) from your trained model (model) ending in your desired layer.

You can do so either with layer name:

(In model.summary(), your dense's layer 'name' with 256 neurons is dense_5)

from keras.models import Model
model2= Model(model.input,model.get_layer('dense_5').output)

Or with layer order:

(your dense layer with 256 neurons is fifth in model.summary())

from keras.models import Model
model2= Model(model.input,model.layers[4].output)

Then you can use predict

preds=model2.predict(x)

Upvotes: 4

Related Questions