Ich benutze Keras mit Tensorflow. Ein Keras Layer hat eine Methode "get_weights()" und ein Attribut "weights". Mein Verständnis ist, dass "Gewichte" die Tensorflow-Tensoren der Gewichte ausgibt und "get_weights()" die Gewichtstensoren auswertet und die Werte als numme Arrays ausgibt. Die beiden zeigen mir jedoch tatsächlich andere Werte. Hier ist der zu replizierende Code.Keras Gewichte und get_weights() zeigen verschiedene Werte
from keras.applications.vgg19 import VGG19
import tensorflow as tf
vgg19 = VGG19(weights='imagenet', include_top=False)
vgg19.get_layer('block5_conv1').get_weights()[0][0,0,0,0]
#result is 0.0028906602, this is actually the pretrained weight
sess = tf.Session()
sess.run(tf.global_variables_initializer())
#I have to run the initializer here. Otherwise, the next line will give me an error
sess.run(vgg19.get_layer('block5_conv1').weights[0][0,0,0,0])
#The result here is -0.017039195 for me. It seems to be a random number each time.
Meine Keras Version ist 2.0.6. Mein Tensorflow ist 1.3.0. Vielen Dank!
ich vermeiden um jeden Preis versuchen, direkt tensorflow zu verwenden, wenn keras verwenden. Wenn Keras dir alles gibt, ist es besser, Dinge von Keras zu machen, weil wir nie wissen, was es möglicherweise tun kann, die fehlen werden, wenn du es direkt in Tensorflow umgehst. Ich benutze nur 'get_weights()' und 'set_weights()', und es hat gut funktioniert. –
Es sieht aus wie eine Zufallszahl, weil es eine Zufallszahl ist, ich denke, wenn Sie tf.global_variables_initializer() aufrufen, initialisieren Sie im Grunde alle Gewichtungen auf die standardmäßige zufällige Initialisierung. –