ran*_*zer 34 python tensorflow
在某些地方,我看到了语法,其中变量用名称初始化,有时没有名称.例如:
# With name
var = tf.Variable(0, name="counter")
# Without
one = tf.constant(1)
Run Code Online (Sandbox Code Playgroud)
命名变量有var "counter"什么意义?
Sal*_*ali 43
该name参数是可选的(您可以创建带或不带它的变量和常量),并且您在程序中使用的变量不依赖于它.姓名在以下几个方面很有帮助:
当您想要保存或恢复变量时(可以在计算后将它们保存为二进制文件).来自docs:
默认情况下,它为每个变量使用Variable.name属性的值
matrix_1 = tf.Variable([[1, 2], [2, 3]], name="v1")
matrix_2 = tf.Variable([[3, 4], [5, 6]], name="v2")
init = tf.initialize_all_variables()
saver = tf.train.Saver()
sess = tf.Session()
sess.run(init)
save_path = saver.save(sess, "/model.ckpt")
sess.close()
Run Code Online (Sandbox Code Playgroud)
但是你有变量matrix_1,matrix_2它们被保存为v1,v2在文件中.
TensorBoard中也使用名称来很好地显示边缘的名称.您甚至可以使用相同的范围对它们进行分组:
import tensorflow as tf
with tf.name_scope('hidden') as scope:
a = tf.constant(5, name='alpha')
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0), name='weights')
b = tf.Variable(tf.zeros([1]), name='biases')
Run Code Online (Sandbox Code Playgroud)
Lif*_*ang 14
您可以将Python命名空间和TensorFlow命名空间想象为两个并行的Universe.TensorFlow空间中的名称实际上是属于任何TensorFlow变量的"真实"属性,而Python空间中的名称只是在脚本运行期间指向TensorFlow变量的临时指针.这就是为什么在保存和恢复变量时,只使用TensorFlow名称的原因,因为脚本终止后Python命名空间不再存在,但Tensorflow命名空间仍然存在于您保存的文件中.
请考虑以下用例代码及其输出
def f():
a = tf.Variable(np.random.normal(), dtype = tf.float32, name = 'test123')
def run123():
f()
init = tf.global_variables_initializer()
with tf.Session() as sess123:
sess123.run(init)
print(sess123.run(fetches = ['test123:0']))
print(sess123.run(fetches = [a]))
run123()
Run Code Online (Sandbox Code Playgroud)
输出:
[0.10108799]
NameError Traceback(最近一次调用last)in()10 print(sess123.run(fetches = [a]))11 ---> 12 run123()
在run123()8 sess123.run(init)9 print(sess123.run(fetches = ['test123:0']))---> 10 print(sess123.run(fetches = [a]))11 12 run123 ()
NameError:未定义名称"a"
f()范围内定义的'a'在其范围之外,即在run123()中不可用.但是默认图表必须用某些东西引用它们,以便可以根据需要在各种范围内引用默认图形,这时它的名称很方便.
| 归档时间: |
|
| 查看次数: |
8903 次 |
| 最近记录: |