首页 > 解决方案 > Tensorflow - 使用 tf.contrib.layers.conv2d 时,我可以设置权重和偏差的名称吗?

问题描述

张量流版本:1.10.1

我想将预训练网络中卷积层的学习权重和偏差转移到新网络。

但是,因为我使用conv2d了 api,所以检查点文件中的权重和偏差自动命名为Conv/weights, Conv/biases, Conv_1/weights, Conv_1/biases,Conv_2/weightsConv_2/biases

但是,这些名称与我的代码中的变量名称不一致。例如Conv/weights,Conv/biases属于C2我的代码中命名的变量,所以我想将它们命名为C2/weights, C2/biases

我知道对于由 定义的变量get_variable,我可以将它们的名称设置为我想要的任何字符串my_varibale = tf.get_variable("whatever_name_I_want",shape,dtype,initializer),其中my_variable命名为"whatever_name_I_want"

但是,当涉及(或ormy_layer = tf.contrib.layers.conv2d(params_blabla)中的等效 api )时,我不知道如何命名.tf.nntf.layersmy_layer

那么,有可能做到这一点吗?如果可能的话,怎么做?

标签: pythontensorflow

解决方案


对于tf.layers.conv2dtf.nn.conv2d,您可以传递一个名为name.

例子:

my_conv1 = tf.layers.conv2D(...., name='my_conv1')
my_conv2 = tf.layers.conv2D(...., name='my_conv2 ')

对于tf.contrib.layers.conv2d,该参数scope用于命名您的图层。

例子:

with tf.name_scope('my_conv1') as scope:
    my_conv1 = tf.contrib.layers.conv2d(..., scope=scope) 

结果:

在所有情况下,您的权重和偏差都被命名为 examplemy_conv1/weightsmy_conv1/bias


推荐阅读