Search code examples
pythontensorflowdeep-learningkeraskeras-layer

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.


Solution

  • 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()