私はTensorflowでKerasを使用しています。 Kerasレイヤーにはメソッドget_weights()と属性weightsがあります。私の理解では、「重み」は重みのテンソル流のテンソルを出力し、「get_weights()」は重みテンソルを評価し、数値を配列として出力します。しかし、実際には2つの異なる値を示しています。ここに複製するコードがあります。Kerasウェイトとget_weights()は異なる値を表示します
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.
マイKerasのバージョンは2.0.6です。私のTensorflowは1.3.0です。ありがとうございました!
私はkerasを使用した場合、直接tensorflowを使用しようとしているすべてのコストで避けます。ケラスがあなたにすべてを与えたら、ケラスから何かをするほうが良いのです。テンソルフローに直接バイパスすると、それが行える可能性があることが決してわからないからです。私は 'get_weights()'と 'set_weights()'のみを使用しており、うまくいきました。 –
乱数のように見えますが、tf.global_variables_initializer()を呼び出すと、基本的にすべてのウェイトをデフォルトのランダム初期化に再初期化していると思います。 –