tf.__version__ == '1.13.2' && cuda == '10.0'
variable_scope()
- 每个变量空间中利用
tf.get_variable()
生成的变量的name必须唯一,如果要用到已经创建的变量,则需要在tf.variable_scope()
设置reuse=True
,如:tf.variable_scope('scope', reuse=True)
。 - variable_scope可嵌套,当外层用到
reuse=True
,则内层无论是否设置reuse=False
,都为True。 - 各个常量或变量的name会带上对应变量空间名称作为前缀。
name_scope()
name_scope()
内部使用get_variable()
函数时,生成的变量名称不会添加变量空间名称前缀,其余的会。name_scope()
没有reuse参数。tf.name_scope('space')
语句重复执行几次,就会生成几个独立的命名空间(variable_scope也一样),尽管表面上看起来都是“space”,实际上tensorflow在每一次执行相同语句都会在后面加上“_序数”,加以区别。
为了让他们在同一个名称空间,解决方法如下:
该方法不适用于with tf.name_scope('space') as space: # with-block with tf.name_scope(space) : # with-block
variable_scope
。
实际上,无论是variable_scope
还是name_scope
,只要将'space'
写成'space/'
的形式,即便重复运行多次语句,各个变量或常量都在同一个scope之下,不会再在空间名后自动增加’_序号’。
get_variable()
严格按照指定的变量空间来创建变量(不会像tf.constant
, tf.Variable
一样重复运行语句生成的名称前缀会带上序数),并会检查指定空间的变量名称的唯一性,若在variable_scope中指定reuse=True
,则可以获取已创建的变量。