Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow Keras权重和get_权重()显示不同的值_Tensorflow_Keras - Fatal编程技术网

Tensorflow Keras权重和get_权重()显示不同的值

Tensorflow Keras权重和get_权重()显示不同的值,tensorflow,keras,Tensorflow,Keras,我将Keras与Tensorflow一起使用。Keras层有一个方法“get_weights()”和一个属性“weights”。我的理解是“权重”输出权重的张量流张量,“get_weights()”计算权重张量并将值作为numpy数组输出。然而,这两个事实上显示了不同的值。下面是要复制的代码 从keras.applications.vgg19导入vgg19 导入tensorflow作为tf vgg19=vgg19(权重='imagenet',包括顶部=假) vgg19.get_layer('bl

我将Keras与Tensorflow一起使用。Keras层有一个方法“get_weights()”和一个属性“weights”。我的理解是“权重”输出权重的张量流张量,“get_weights()”计算权重张量并将值作为numpy数组输出。然而,这两个事实上显示了不同的值。下面是要复制的代码

从keras.applications.vgg19导入vgg19
导入tensorflow作为tf
vgg19=vgg19(权重='imagenet',包括顶部=假)
vgg19.get_layer('block5_conv1')。get_weights()[0][0,0,0,0]
#结果是0.0028906602,这实际上是预训练重量
sess=tf.Session()
sess.run(tf.global\u variables\u initializer())
#我必须在这里运行初始化器。否则,下一行将给我一个错误
sess.run(vgg19.get_层('block5_conv1')。权重[0][0,0,0,0])
#这里的结果对我来说是-0.017039195。每次似乎都是一个随机数。

我的Keras版本是2.0.6。我的Tensorflow是1.3.0。谢谢大家!

方法
get\u weights()
实际上只是计算属性
weights
给出的Tensorflow张量的值。我在
get_weights()
sess.run(weight)
之间得到不同值的原因是我在两个不同的会话中引用了变量。当我运行
vgg19=vgg19(weights='imagenet',include_top=False)
时,Keras已经创建了Tensorflow会话,并在该会话中使用预先训练的值初始化权重。然后我通过运行
sess=tf.session()
创建了另一个名为sess的Tensorflow会话。在此会话中,权重尚未初始化。然后,当我运行
sess.run(tf.global\u variables\u initializer())
时,随机数被分配给这个会话中的权重。因此,关键是要确保在使用Tensorflow和Keras时使用同一会话。下面的代码显示
get_weights()
sess.run(weight)
给出相同的值

将tensorflow导入为tf
从keras导入后端为K
从keras.applications.vgg19导入vgg19
sess=tf.Session()
K.SETU会话(sess)
vgg19=vgg19(权重='imagenet',包括顶部=假)
vgg19.get_layer('block5_conv1')。get_weights()[0][0,0,0,0]
#结果是0.0028906602,这实际上是预训练重量
sess.run(vgg19.get_层('block5_conv1')。权重[0][0,0,0,0])
#这里的结果也是0.0028906602

方法
get\u weights()
实际上只是计算属性
weights
给出的Tensorflow张量的值。我在
get_weights()
sess.run(weight)
之间得到不同值的原因是我在两个不同的会话中引用了变量。当我运行
vgg19=vgg19(weights='imagenet',include_top=False)
时,Keras已经创建了Tensorflow会话,并在该会话中使用预先训练的值初始化权重。然后我通过运行
sess=tf.session()
创建了另一个名为sess的Tensorflow会话。在此会话中,权重尚未初始化。然后,当我运行
sess.run(tf.global\u variables\u initializer())
时,随机数被分配给这个会话中的权重。因此,关键是要确保在使用Tensorflow和Keras时使用同一会话。下面的代码显示
get_weights()
sess.run(weight)
给出相同的值

将tensorflow导入为tf
从keras导入后端为K
从keras.applications.vgg19导入vgg19
sess=tf.Session()
K.SETU会话(sess)
vgg19=vgg19(权重='imagenet',包括顶部=假)
vgg19.get_layer('block5_conv1')。get_weights()[0][0,0,0,0]
#结果是0.0028906602,这实际上是预训练重量
sess.run(vgg19.get_层('block5_conv1')。权重[0][0,0,0,0])
#这里的结果也是0.0028906602

在使用keras时,我不惜一切代价避免直接使用tensorflow。如果keras给了你一切,那么最好从keras那里做一些事情,因为我们永远不知道当你直接绕过它到tensorflow时,它可能会做些什么。我只使用了
get\u weights()
set\u weights()
,它工作得很好。它看起来像一个随机数,因为它是一个随机数,我想当你调用tf.global\u variables\u initializer()时您基本上是将所有权重重新初始化为默认的随机初始化。我不惜一切代价避免在使用keras时直接使用tensorflow。如果keras给了你一切,那么最好从keras那里做一些事情,因为我们永远不知道当你直接绕过它到tensorflow时,它可能会做些什么。我只使用了
get\u weights()
set\u weights()
,它工作得很好。它看起来像一个随机数,因为它是一个随机数,我想当你调用tf.global\u variables\u initializer()时您基本上是将所有权重重新初始化为默认的随机初始化。发布您的第一个SO问题并亲自回答(您也应该接受它-这没有错)发布您的第一个SO问题并亲自回答(您也应该接受它-这没有错)