Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get the weights of a layer in Keras?

I am using Windows 10, Python 3.5, and tensorflow 1.1.0. I have the following script:

import tensorflow as tf import tensorflow.contrib.keras.api.keras.backend as K from tensorflow.contrib.keras.api.keras.layers import Dense  tf.reset_default_graph() init = tf.global_variables_initializer() sess =  tf.Session() K.set_session(sess) # Keras will use this sesssion to initialize all variables  input_x = tf.placeholder(tf.float32, [None, 10], name='input_x')     dense1 = Dense(10, activation='relu')(input_x)  sess.run(init)  dense1.get_weights() 

I get the error: AttributeError: 'Tensor' object has no attribute 'weights'

What am I doing wrong, and how do I get the weights of dense1? I have look at this and this SO post, but I still can't make it work.

like image 571
Toke Faurby Avatar asked May 01 '17 06:05

Toke Faurby


People also ask

What are weights in Keras?

1 Answer. Show activity on this post. Model weights are all the parameters (including trainable and non-trainable) of the model which are in turn all the parameters used in the layers of the model. And yes, for a convolution layer that would be the filter weights as well as the biases.

How do you set weights in Keras?

Use the get_weights() function to get the weights and biases of the layers before training the model. These are the weights and biases with which the layers will be initialized.

How do I get the layer name in Keras?

Every layer of the Keras model has a unique name. e.g. "dense_1", "dense_2" etc. Keras has a function for getting a layer with this unique name. So you need just to call that function and pass a name for the layer.


2 Answers

If you want to get weights and biases of all layers, you can simply use:

for layer in model.layers: print(layer.get_config(), layer.get_weights()) 

This will print all information that's relevant.

If you want the weights directly returned as numpy arrays, you can use:

first_layer_weights = model.layers[0].get_weights()[0] first_layer_biases  = model.layers[0].get_weights()[1] second_layer_weights = model.layers[1].get_weights()[0] second_layer_biases  = model.layers[1].get_weights()[1] 

etc.

like image 182
Onno Kampman Avatar answered Sep 19 '22 05:09

Onno Kampman


If you write:

dense1 = Dense(10, activation='relu')(input_x)

Then dense1 is not a layer, it's the output of a layer. The layer is Dense(10, activation='relu')

So it seems you meant:

dense1 = Dense(10, activation='relu') y = dense1(input_x) 

Here is a full snippet:

import tensorflow as tf from tensorflow.contrib.keras import layers  input_x = tf.placeholder(tf.float32, [None, 10], name='input_x')     dense1 = layers.Dense(10, activation='relu') y = dense1(input_x)  weights = dense1.get_weights() 
like image 37
Francois Avatar answered Sep 19 '22 05:09

Francois