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.
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.
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.
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.
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.
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With