Tensorflow 中的入队和增量变量

2023-12-29

如何使张量流图将递​​增的数字推送到队列?

我这样做只是为了学习目的,所以我希望您保持它与我正在做的事情相似(并纠正我做错的事情)。这是我的代码:

import tensorflow as tf

# create queue
queue = tf.RandomShuffleQueue(capacity=10, min_after_dequeue=1, dtypes=tf.float32)

# create variables, and "add" operation
push_var = tf.Variable(initial_value=1.0, trainable=False)
add = push_var.assign_add(1)

# enqueue operation
push = queue.enqueue(add)

# dequeue operation
pop = queue.dequeue()

sess = tf.InteractiveSession()

tf.initialize_all_variables().run()

# add var to stack
sess.run(push) # push_var = 2 after ran
sess.run(push) # push_var = 3 after ran
sess.run(push) # push_var = 4 after ran
sess.run(push) # push_var = 5 after ran
sess.run(push) # push_var = 6 after ran
sess.run(push) # push_var = 7 after ran
sess.run(push) # push_var = 8 after ran

# pop variable (random shuffle)
print sess.run(pop)
print sess.run(pop)

sess.close()

Output:

8
8

我期望它是 2 到 8 之间的 2 个随机数。相反,它总是弹出变量的当前值。

这是因为我不是推送变量的实际值而是推送指向变量的指针?张量流文档 https://www.tensorflow.org/versions/r0.11/api_docs/python/state_ops.html#Variable says assign_add回报

一个张量,将在之后保存该变量的新值 添加已完成。

再次,我正在尝试了解张量流。如果您有任何学习资源(除了 TensorFlow 网站),我将不胜感激!谢谢。

EDIT:

改变push = queue.enqueue(add) to push = queue.enqueue(add + 0)结果达到预期的行为。有人可以解释一下吗?


@David Wong 是正确的,该变量只是对其基础张量的引用。即使您已经推送了 7 次,队列中的 7 个元素都指向相同的底层张量。什么时候pop执行后,底层张量被引用并返回。

让我再解释一下。这assign_add(1)只是更新引用的值,因此它返回一个引用。当你这样做时push = queue.enqueue(add),它内部调用tf.convert_to_tensor(add) https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/data_flow_ops.py#L276如果它的输入也是一个引用,它将返回一个引用。

您可以检查输出tf.convert_to_tensor(add)在Python外壳中:

In [2]: tf.convert_to_tensor(add)
Out[2]: <tf.Tensor 'AssignAdd:0' shape=() dtype=float32_ref>

The dtype=float32_ref表明它是一个参考。

As for add + 0,也可以在ipython shell中检查,相当于tf.add(add, 0):

In [3]: add+0
Out[3]: <tf.Tensor 'add:0' shape=() dtype=float32>

它不是引用并且有父节点add = push_var.assign_add(1).

所以这里的问题是

1)张量在被推入队列时将被评估,其所有父节点也将被评估。

就你而言,add + 0被求值,它的父节点也被求值add = push_assign_add(1)这使得引用值增加 1。

2) 当引用被推入队列时,不会被评估。队列中只有引用。当它们被弹出和引用时,它们的实际张量值被获取。

就您而言,所有这些引用都指向相同的张量。所以流行音乐全部回归8.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tensorflow 中的入队和增量变量 的相关文章

随机推荐

  • 如何防止返回表单时重新提交表单?

    我有一些常规输入网页 用户可以在其中输入有关项目的一些详细信息 然后 在用户按下提交按钮后 她会被重定向到一个网页 显示一切正常 问题是 如果她单击后退按钮 则会再次显示输入页面 如果她点击提交 则会重新提交表单 并将另一个项目写入数据库
  • Paypal Express Checkout - 您多次调用 paypal.checkout.setup()

    我们正在使用 PayPal 快速结帐 JavaScript API http www paypalobjects com api checkout js http www paypalobjects com api checkout js
  • 内容安全策略不允许提交表单

    请我在这里需要帮助 我有一个表单要提交到另一个网址 但是当我尝试提交它时 它拒绝提交 我正在检查我的控制台 在 Chrome 上 我看到以下错误 resources2 aspx HCCID 75694719 culture en US ml
  • 我可以使用

    看到标签的用法很常见
  • 华为或vivo手机如何修复“应用程序感染病毒”

    我用我写的代码做了一个apk 当我使用华为或vivo手机下载apk时 浏览器显示提示 该应用程序感染了病毒 如何修复它 在华为设备中测试我的应用程序时 我遇到了类似的警告 我直接点击继续安装 华为似乎会将所有非应用商店的内容视为病毒 现在我
  • asp.Net MVC 2 应用程序上没有样式/图像

    问候 我的 ASP MVC 应用程序有一个小问题 在我的本地开发服务器上 一切正常 但当我尝试将应用程序发布到 IIS 7 0 服务器时 它只显示没有任何样式 标记 图像的纯页面 我将所有这些内容放在 Content 子文件夹中 但是当我尝
  • 循环文件记录

    我想知道是否有 C 的记录器库可以进行循环文件日志记录 我目前正在研究 log4C 但找不到足够的文档来说明它会进行循环日志记录 如果有人这样做过 请告诉我 Thanks 这是一个例子 这是一个删减版本 在我们的系统中 我们使用 vargs
  • 使用自定义可解码解码 Firestore 结构时获取 DocumentID

    我有以下结构 struct Vehicle Codable Identifiable DocumentID var id String var name String 只要我使用默认的 Swift 解码器 我就可以毫无问题地加载 Fires
  • 使用类路径参数运行 jar

    我可能错过了一些愚蠢的东西 但仍然如此 我创建了一个具有以下内部结构的 jar 文件 folder1 folder2 META INF 资源 其中folder1和folder2包含 class文件 而resources包含txt和png文件
  • 来自主 Gui 模块外部的 PyQt5 中断关闭事件

    我使用 Qt Designer 构建 GUI 并使用 pyuic5 将它们转换为 py 文件 我的最终目标是当变量 1 时中断用户关闭程序并向他们显示 您确定要关闭吗 类型对话框 如果所述变量 0 则正常关闭程序 我见过很多关于如何执行此操
  • C# 访问字段语法

    如果我只有要访问的变量的名称 我将如何访问对象的变量值 在 C 中 假设我有一个变量名称列表 表示为数组中的字符串 例如 我如何循环访问它们 我可以在 Actionscript 中执行类似以下操作 var arrayOfVariableNa
  • 如何从我的 makefile 中调用特定目标?

    a echo 1 b echo 2 c if d somefolder then how do I invoke target b here fi 我如何调用目标b内部目标c 根据我的情况 有点像antcall 如果你熟悉 ant 的话 说
  • 如何在 MiUi pre - Marshmallow 中请求权限?

    int permissionCheck ContextCompat checkSelfPermission mActivity Manifest permission RECEIVE SMS ActivityCompat requestPe
  • 如何确定应用程序中使用了哪些 JAR

    现有应用程序的类路径中有大量 JAR 文件 为了确定起见 最初必须有人添加所有 JAR 有些 JAR 显然没有被使用 我们已经删除了其中一些不需要的 JAR 没有造成任何问题 如何确定哪些 JAR 正在使用 哪些 JAR 不需要 除了试错法
  • Django 性能测试套件将报告指标(数据库查询等)

    我有一个复杂的 Django Web 应用程序 其中投入了很多人年的工作 有时可能需要优化 我可以使用 例如 django 的测试客户端编写几个常见的操作 流程的脚本 是否有一些程序 给定这样的 python 脚本 然后将运行 并报告各种
  • C++ 投掷类成员

    我有以下 C 代码 template
  • 查找数组中的重复元素?

    我看到一个面试题是这样的 数组中有一个数字重复 找到它 简单的解决方案如下 for int i 0 i
  • REST API 的试运行策略

    我正在寻找 REST API 的 试运行 操作的一些最佳实践 假设我有一个端点将资金从账户 A 转账到账户 B 我可以像这样发起转账 POST transactions amount 1000 how much to transfer so
  • jQuery 数据绑定 - 现在流行的插件是什么?

    我需要某种类型的 JS MVC DataBinding 解决方案 与实施 GMAIL Web 应用程序类似 消息索引和消息显示 在消息显示的位置 如果您修改消息 它会自动在消息索引中更新 我应该学习什么插件才能在不使用大量 jQuery 的
  • Tensorflow 中的入队和增量变量

    如何使张量流图将递 增的数字推送到队列 我这样做只是为了学习目的 所以我希望您保持它与我正在做的事情相似 并纠正我做错的事情 这是我的代码 import tensorflow as tf create queue queue tf Rand