Obtaining the parameters of layers after concatenation in Keras

Issue

I’m trying to get the output and input parameters after concatenation in keras, more specifically in "concat_" and "hidden 6" layers.

input_A=keras.layers.Input(shape=X1_Train.shape[1])
input_B=keras.layers.Input(shape=X2_Train.shape[1])
hidden1=keras.layers.Dense(activation='linear',units=25)(input_A)
hidden2=keras.layers.Dense(activation='linear',units=25)(hidden1)
hidden3=keras.layers.Dense(activation='linear',units=25)(hidden2)
hidden4=keras.layers.Dense(activation='linear',units=10)(hidden3)
hidden5=keras.layers.Dense(activation='linear',units=1)(hidden4)
concat_=keras.layers.concatenate([hidden5, input_B])
hidden6=keras.layers.Dense(activation='linear',units=1)(concat_)
output=keras.layers.Dense(activation='linear',units=1)(hidden6)
model1=keras.Model(inputs=[input_A,input_B], outputs=[output])   

Is there way to obtain the parameters by layer name?
Also, is there any way to run the model (after training) until the concatenation point?

Solution

You could give each layer that you want to later retrieve, a specific name, like this:

from tensorflow import keras

input_A=keras.layers.Input(shape=1)
input_B=keras.layers.Input(shape=2)
hidden1=keras.layers.Dense(activation='linear',units=25)(input_A)
hidden2=keras.layers.Dense(activation='linear',units=25)(hidden1)
hidden3=keras.layers.Dense(activation='linear',units=25)(hidden2)
hidden4=keras.layers.Dense(activation='linear',units=10)(hidden3)
hidden5=keras.layers.Dense(activation='linear',units=1)(hidden4)
concat_=keras.layers.concatenate([hidden5, input_B], name="concat_layer")
hidden6=keras.layers.Dense(activation='linear',units=1, name="hidden_layer")(concat_)
output=keras.layers.Dense(activation='linear',units=1)(hidden6)
model1=keras.Model(inputs=[input_A,input_B], outputs=[output]) 

Once you retrieve the layer by name, you can access different attributes, like the inputs, outputs, weights:

out = model1.get_layer("concat_layer").output
inp = model1.get_layer("concat_layer").input
weights = model1.get_layer("concat_layer").get_weights()

To run the model up until a specific layer:

# create an shorter model, up until the concatenation layer included
model_intermediate = keras.Model(inputs=model1.input, outputs = model1.get_layer("concat_layer").output)

# run inference
pred = model_intermediate.predict(...)

Answered By – ClaudiaR

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published