2017-05-01 4 views
1

Ich verwende Windows 10, Python 3.5 und Tensorflow 1.1.0. Ich habe das folgende Skript:Keras 2.x - Get Gewichte der Ebene

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

Ich erhalte den Fehler: AttributeError: 'Tensor' object has no attribute 'weights'

Was mache ich falsch, und wie bekomme ich die Gewichte von dense1? Ich habe this und this SO Post, aber ich kann es immer noch nicht funktionieren.

Antwort

6

Wenn Sie schreiben:

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

Dann dense1 nicht eine Schicht ist, ist es die Ausgabe einer Schicht ist. Die Schicht ist Dense(10, activation='relu')

So scheint es, Sie meinten:

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

Hier ist ein Full-Schnipsel:

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() 
+0

Was ist der richtige Weg, dies zu tun, wenn ich mehrere Schichten wollen? I.e. Gibt es einen besseren Weg als 'y = dichte2 (dichte1 (input_x))' –

+0

Vielen Dank für diese Erklärung. Klarheit vorausgesetzt. –

5

Wenn Sie Gewichte und Neigungen aller Schichten erhalten möchten, können Sie einfach :

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

Dies wird alle relevanten Informationen drucken.

Wenn Sie die Gewichte direkt zurückgeführt, wie numpy Arrays möchten, können Sie verwenden:

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] 

usw.

Verwandte Themen