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()您正在使用的任何其他图表.
最新的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它返回在该图层范围内找到的所有可训练变量的列表.
我遇到了这个问题并解决了它.tf.layers.dense的名称不必与内核名称的前缀相同.我的张量是"dense_2/xxx",但它的内核是"dense_1/kernel:0".为了确保tf.get_variable有效,您最好name=xxx在tf.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.
| 归档时间: |
|
| 查看次数: |
18478 次 |
| 最近记录: |