TensorFlowwith方法和tf.variable

    技术2022-07-10  138

    提示:如果您能安心的读完下文,我相信您会对with用法又会有一个新的认识


    实例代码

    with tf.variable_scope(get_name("abc")) as scope1: v2 = tf.get_variable('v2', shape=[4,9],initializer=tf.constant_initializer()) with tf.variable_scope(get_name("efg")) as scope2: v3 = tf.get_variable('v3', shape=[4,9],initializer=tf.constant_initializer())

    对于上述代码仅仅是一个演示(想要运行是不可能的)

    在这里,我仅仅想说明的是关于with 和 tf.variable_scope联合时 取出变量名字是如何定义的。


    对于变量名v2的提取:其名称应该为:abc/v2 对于变量名v3的提取:其名称应该为:abc/efg/v3


    得到的这个结果的原因是什么呢?

    其实,和with方法是有关系的

    with方法,在我们看来仅仅是用于抛出异常的,但是它的这种操作也相当于进展出栈的过程

    比如,我们定义了一个Session会话,变量在调用的过程就是一个进栈出栈的过程

    当在调用变量v2的时候,我们首先会进入with的__enter__方法,这也就是进栈的过程

    此时也就相当于是scope1进入栈中

    当执行完变量名的定义后

    我们会进入with的__exit__的方法,这也就是弹栈的过程

    这样获取的变量名称就是:abc/v2

    对于变量v3,同样的道理

    scope1进栈,随后scope2进栈,当获取变量后,再执行弹栈操作,最终获取到了变量的名称为:abc/efg/v3


    依据目前的学习,我将with总结为以下三种使用的工具

    抛出异常(常见)作用域(类似于本文的应用)线程锁(类似于Lock的上锁和解锁)
    Processed: 0.010, SQL: 9