Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get biases from a trained model in Keras?

I have built a simple neural network,

model = Sequential()
model.add(Dense(20, input_dim=5, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))

and I would get its weights by:

summary = model.summary()
W_Input_Hidden = model.layers[0].get_weights()[0]
W_Output_Hidden = model.layers[1].get_weights()[0]

print(summary)
print('INPUT-HIDDEN LAYER WEIGHTS:')
print(W_Input_Hidden)
print('HIDDEN-OUTPUT LAYER WEIGHTS:')
print(W_Output_Hidden)

but, in this way, I only get the weights matrices (5x20 , 1x20) without the biases. How can I get the biases values?

like image 697
Simone Avatar asked Feb 05 '17 14:02

Simone


People also ask

How do you find the weights and biases of a model?

If you just need weights and bias values at the end of the training you can use model. layer[index]. get_weights()[0] for weights and model.

How do you add bias in keras?

Use Bias. It specifies whether or not you want to include biases in the layer for all of its neurons. If we want to include biases, we set the parameter value to True. Otherwise, we set it to False.


2 Answers

Quite simple, its just the second element in the array returned by get_weights() (For Dense layers):

B_Input_Hidden = model.layers[0].get_weights()[1]
B_Output_Hidden = model.layers[1].get_weights()[1]
like image 165
Dr. Snoopy Avatar answered Oct 07 '22 09:10

Dr. Snoopy


Here's a complete working example (implemented with TensorFlow 2 and Keras).

import tensorflow as tf
import numpy as np


def get_model():
    inp = tf.keras.layers.Input(shape=(1,))
    # Use the parameter bias_initializer='random_uniform'
    # in case you want the initial biases different than zero.
    x = tf.keras.layers.Dense(8)(inp)
    out = tf.keras.layers.Dense(1)(x)
    model = tf.keras.models.Model(inputs=inp, outputs=out)
    return model


def main():
    model = get_model()
    model.compile(loss="mse")

    weights = model.layers[1].get_weights()[0]
    biases = model.layers[1].get_weights()[1]

    print("initial weights =", weights)
    print("initial biases =", biases)

    X = np.random.randint(-10, 11, size=(1000, 1))
    y = np.random.randint(0, 2, size=(1000, 1))

    model.fit(X, y)

    weights = model.layers[1].get_weights()[0]
    biases = model.layers[1].get_weights()[1]

    print("learned weights =", weights)

    # Biases are similar because they are all initialized with zeros (by default).
    print("learned biases =", biases)


if __name__ == '__main__':
    main()
like image 39
nbro Avatar answered Oct 07 '22 08:10

nbro