Tensorflow版本:1.10.1
我想将我的预训练网络中卷积层的学习权重和偏差转移到新网络中。
但是,由于我使用了apt-get upgrade
API,因此检查点文件中的权重和偏差会自动命名为conv2d
,Conv/weights
,Conv/biases
,Conv_1/weights
,Conv_1/biases
,Conv_2/weights
等。
但是,这些名称与代码中的变量名称不一致。
例如,Conv_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"
(或my_layer = tf.contrib.layers.conv2d(params_blabla)
或tf.nn
中的等效api)时,我不知道如何命名tf.layers
。
那么,有可能这样做吗?如果可能,怎么办?
答案 0 :(得分:2)
对于tf.layers.conv2d和tf.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)
结果:
在所有情况下,您的权重和偏见都以my_conv1/weights
和my_conv1/bias
之类的方式命名。