如何在tf.layers.dense中获得权重?

use*_*550 16 tensorflow

我想在张量板直方图中绘制tf.layers.dense的权重,但它没有在参数中显示,我该怎么做?

P-G*_*-Gn 32

权重被添加为名为变量的变量kernel,因此您可以使用

x = tf.dense(...)
weights = tf.get_default_graph().get_tensor_by_name(
  os.path.split(x.name)[0] + '/kernel:0')
Run Code Online (Sandbox Code Playgroud)

您显然可以替换tf.get_default_graph()您正在使用的任何其他图表.

  • 要获得偏见,只需使用`bias = tf.get_default_graph().get_tensor_by_name(os.path.split(x.name)[0] +'/ bias:0')` (10认同)
  • 似乎这应该标记为已解决. (3认同)

Ani*_*war 8

最新的tensorflow图层api使用该tf.get_variable调用创建所有变量.这确保了如果您希望再次使用该变量,您只需使用该tf.get_variable函数并提供您希望获得的变量的名称.

在a的情况下tf.layers.dense,变量创建为:layer_name/kernel.所以,你可以通过说:

with tf.variable_scope("layer_name", reuse=True):
    weights = tf.get_variable("kernel") # do not specify
    # the shape here or it will confuse tensorflow into creating a new one.
Run Code Online (Sandbox Code Playgroud)

[编辑]:Tensorflow的新版本现在具有面向API的功能和面向对象的接口.如果您只需要用于计算目的的图层,那么使用功能api是一个不错的选择.函数名称以小写字母开头,例如 - > tf.layers.dense(...).可以使用大写首字母创建图层对象,例如 - > tf.layers.Dense(...).获得此图层对象的句柄后,即可使用其所有功能.为了获得权重,只需使用obj.trainable_weights它返回在该图层范围内找到的所有可训练变量的列表.


Yer*_*ick 8

我遇到了这个问题并解决了它.tf.layers.dense的名称不必与内核名称的前缀相同.我的张量是"dense_2/xxx",但它的内核是"dense_1/kernel:0".为了确保tf.get_variable有效,您最好name=xxxtf.layers.dense函数中设置两个名称拥有相同的前缀.它的工作原理如下:

l=tf.layers.dense(input_tf_xxx,300,name='ip1')
with tf.variable_scope('ip1', reuse=True):
    w = tf.get_variable('kernel')
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我的tf版本是1.3.


mic*_*mic 5

我对张量流快要疯了。

我运行这个:

sess.run(x.kernel)

训练后,我得到了权重。

来自这里描述的属性。

我的意思是我快疯了,因为在 tf 中似乎有一百万种略有不同的方法来做某事,并且这些方法分散了周围的教程。