当前位置: 首页 > 知识库问答 >
问题:

理解tensorflow中的资源变量

孙夕
2023-03-14

从这里开始

与tf. Variable不同,tf. ResourceVariable具有明确定义的语义学。在TensorFlow图中,ResourceVariable的每次使用都会向图添加一个read_value操作。read_value操作返回的Tensors保证可以看到read_value依赖的任何操作(直接、间接或通过控件依赖)中发生的对变量值的所有修改,并且保证不会看到对read_value操作不依赖的变量值的任何修改。例如,如果在单个session.run调用中有多个对ResourceVariable的赋值,则每个操作都有一个明确定义的值,如果赋值和读取通过图中的边连接,则该操作使用变量的值。

所以我试着测试这种行为。我的代码

tf.reset_default_graph()
a = tf.placeholder(dtype=tf.float32,shape=(), name='a')
d = tf.placeholder(dtype=tf.float32,shape=(), name='d')
b = tf.get_variable(name='b', initializer=tf.zeros_like(d), use_resource=True)
c=a+b
b_init = tf.assign(b, d)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())   
    print(sess.run([c,b_init,b], feed_dict={a:5.,d:10.})) 

这将打印[15.,10.,10.]。根据我对张量流变量c中资源变量的理解,不应该访问b_init中分配给它的b的值,这意味着输出应该是[5.,10.,0.]。请帮助我理解我哪里出错了

共有1个答案

董康平
2023-03-14

两点意见:

>

  • 在sess的第一个参数中写入变量/ops的顺序。运行并不意味着这是执行顺序。

    如果某个东西在一个步骤中起作用,但这并不意味着如果添加大量并行性,它就会起作用。

    问题的答案是:

    定义中的关键是依赖于aread_value操作保证看到read_value依赖于的所有修改。如果您查看下图,add操作实际上包含bReadVariableOp操作,然后ReadVariableOp也依赖于AssignVariableOp。因此,c应该考虑对b的所有修改。

    如果你想看到[10.0,5.0,0.0],你必须添加tf。control_依存关系如下

    tf.reset_default_graph()
    a = tf.placeholder(dtype=tf.float32,shape=(), name='a')
    d = tf.placeholder(dtype=tf.float32,shape=(), name='d')
    b = tf.get_variable(name='b', initializer=tf.zeros_like(d), use_resource=True)
    c=a+b
    with tf.control_dependencies([c]):
      b_init = tf.assign(b, d)
    
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())   
        print(sess.run([b_init,c,b], feed_dict={a:5.,d:10.})) 
    

  •  类似资料:
    • 我是从SAS背景来到Python的。 我已使用以下方法将SAS版本5传输文件(XPT)导入python: 该文件是一个简单的SAS传输文件,从使用以下内容创建的SAS数据集转换而来: 文件导入正确,我可以使用以下方式查看内容: 显示数据帧打印的屏幕截图 但是,当我使用变量资源管理器查看文件时,所有字符列都显示为空白。 显示通过变量浏览器查看的数据帧的屏幕截图 我曾尝试将其作为sas数据集而不是传输

    •   上下文管理器用于资源管理。它们允许你在需要时分配和释放资源。上下文管理器最常用和最受认可的例子是 with 语句。 它主要用于打开和关闭文件。with 允许在单行出现问题时打开和关闭文件。 它的主要优点是它可以确保文件正确关闭。 with open ('./data.txt','w') as f:     f.write("Hello")

    • 我正在我的GTX 1060 6gb上使用Python中的Tensorflow 1.2训练LSTM。 在每个时代,我用这种方法保存模型: 一切正常,但在九个时代之后,当我试图用这种方法保存模型时,我得到了ResourceExhaustedError。 我在培训期间检查了我的资源,但没有耗尽任何资源。 我得到的错误如下: 2017-06-29 12:43:02.865845: W tenstorflo

    • 我试图完全清理资源组在Azure。 删除资源组不是选项(访问权限:参与者,而不是所有者) 做到这一点的最优雅和明显的方法(也在一些文章中描述)是使用“空”部署模板执行完整的部署: 删除SQL Server开始“...”接受“...”失败“...”开始“...”接受“...”失败“... 你想到主意了。 其他时候效果很好。 您将得到数据库删除的无限循环“开始..接受..失败..开始..接受..失败.

    • 我有一个房子的资源链接,如果你想查看它。它基本上只是一个黑色的主页按钮。 我有它包括和导入作为图像资产作为绘图。 我试图将其设置为按钮,但以编程方式将其更改为白色。 以下是我尝试将颜色更改为白色的方法: 知道我哪里出错了吗?

    • 当用多个团队或者用户共用同一个集群的时候难免会有资源竞争的情况发生,这时候就需要对不同团队或用户的资源使用配额做出限制。 开启资源配额限制功能 目前有两种资源分配管理相关的控制策略插件 ResourceQuota 和 LimitRange。 要启用它们只要 API Server 的启动配置的 KUBE_ADMISSION_CONTROL 参数中加入了 ResourceQuota 的设置,这样就给集