相等比较在 TensorFlow 2.0 tf.function() 中不起作用

2023-11-22

继讨论之后TensorFlow 2.0 AutoGraphs,我一直在玩弄并注意到不平等比较,例如> and <直接指定,而相等比较则使用tf.equal.

这里有一个例子来演示。该函数使用>运算符和效果很好当被调用时:

@tf.function
def greater_than_zero(value):
    return value > 0

greater_than_zero(tf.constant(1))
#  <tf.Tensor: id=1377, shape=(), dtype=bool, numpy=True>
greater_than_zero(tf.constant(-1))
# <tf.Tensor: id=1380, shape=(), dtype=bool, numpy=False>

这是另一个使用相等比较的函数,但是不起作用:

@tf.function
def equal_to_zero(value):
    return value == 0

equal_to_zero(tf.constant(1))
# <tf.Tensor: id=1389, shape=(), dtype=bool, numpy=False>  # OK...

equal_to_zero(tf.constant(0))
# <tf.Tensor: id=1392, shape=(), dtype=bool, numpy=False>  # WHAT?

如果我改变==平等比较tf.equal,它会起作用的。

@tf.function
def equal_to_zero2(value):
    return tf.equal(value, 0)

equal_to_zero2(tf.constant(0))
# <tf.Tensor: id=1402, shape=(), dtype=bool, numpy=True>

我的问题是:为什么使用不等式比较运算符在内部起作用tf.function函数,而相等比较则不然?


我在文章的第三部分分析了这种行为“分析 tf.function 以发现 Autograph 的优势和微妙之处”(我强烈建议阅读所有 3 部分,以了解如何在用tf.function- 答案底部的链接)。

For the __eq__ and tf.equal问题,答案是:

简而言之:__eq__运算符(对于tf.Tensor) 已被覆盖,但运算符不使用tf.equal为了检查 Tensor 相等性,它只检查 Python 变量标识(如果您熟悉 Java 编程语言,这与字符串对象上使用的 == 运算符完全相同)。原因是,tf.Tensor对象需要是可哈希的,因为它在 Tensorflow 代码库中的任何地方都用作 dict 对象的键。

而对于所有其他运算符,答案是 AutoGraph 不会将 Python 运算符转换为 TensorFlow 逻辑运算符。在本节中AutoGraph 如何(不)转换运算符我展示了每个 Python 运算符都会转换为始终被评估为 false 的图形表示形式。

事实上,以下示例生成输出“wat”

@tf.function
def if_elif(a, b):
  if a > b:
    tf.print("a > b", a, b)
  elif a == b:
    tf.print("a == b", a, b)
  elif a < b:
    tf.print("a < b", a, b)
  else:
    tf.print("wat")
x = tf.constant(1)
if_elif(x,x)

在实践中,AutoGraph无法将Python代码转换为图形代码;我们必须仅使用 TensorFlow 原语来帮助它。在这种情况下,您的代码将按您的预期工作。

@tf.function
def if_elif(a, b):
  if tf.math.greater(a, b):
    tf.print("a > b", a, b)
  elif tf.math.equal(a, b):
    tf.print("a == b", a, b)
  elif tf.math.less(a, b):
    tf.print("a < b", a, b)
  else:
    tf.print("wat")

我在这里提供了所有三篇文章的链接,我想您会发现它们很有用:

part 1, part 2, part 3

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

相等比较在 TensorFlow 2.0 tf.function() 中不起作用 的相关文章

随机推荐

  • C#:获取完整的桌面大小?

    如何知道整个桌面的大小 Not 工作区 和not 屏幕分辨率 两者都仅指一个屏幕 我想找出每个显示器仅显示一部分的虚拟桌面的总宽度和高度 您有两个选择 演示框架 dll SystemParameters VirtualScreenWidth
  • 如何从另一个包中找到fxml?

    我创建了一个简单的JavaFX应用 它有两个包 主类是JFXTest2 java is in good包和 fxml 及其控制器位于JFXTest2包裹 现在的问题是我无法在主类中加载fxml 我尝试加载 fxml 像这样 Parent r
  • 与“operator==”不匹配 C++ 编译错误

    来自 C 新手的另一个问题 我收到以下代码块的编译器错误 与 operator 不匹配 void swap Team t1 Player p1 Team t2 Player p2 Player new t1 11 Player new t2
  • 如何在 SQL Server 中更新具有数百万行的大型表?

    I ve an UPDATE可以更新超过百万条记录的语句 我想批量更新它们 1000 或 10000 我尝试过 ROWCOUNT但我无法得到想要的结果 只是出于测试目的 我所做的是 我选择了包含 14 条记录的表并将行数设置为 5 此查询应
  • 如何在 ConstraintValidator 中自动装配服务

    我正在使用 Spring MVC 编写我的应用程序 我想验证用户注册时数据库中是否存在电子邮件 我已经编写了自己的注释约束 名为独特的电子邮件 我的用户实体用户 java Entity Table name users public cla
  • Spring RestTemplate 重定向 302

    我正在尝试使用 Spring Rest 模板执行登录请求 RestTemplate restTemplate new RestTemplate HttpHeaders headers new HttpHeaders headers setC
  • 如何在 jQuery 中截断字符串?

    我的标题很长 想截断它们 但要以一种不打断单词的方式 我的意思是剪切发生在单词之间 而不是剪切一个单词 我怎样才能使用 jquery 做到这一点 From jQuery 文本截断 阅读更多样式 尝试这个 var title This is
  • 如何使用 lapply() 将 NA 更改为 0?

    我有一个数据集列表 dfList lt list df1 df2 df3 每个数据集看起来都是这样的 apples oranges 1 2 NA 4 我想以编程方式更改每个数据帧的NAs to 0s 我该怎么做呢 到目前为止我的代码 lap
  • 如何在 SQL Server 中保存波斯日期时间?

    在过去的项目中 我尝试将时间格式保存为公历日期 并在应用程序的逻辑层将公历日期转换为波斯日期 但我厌倦了这样做 我需要在 SQL Server 中以波斯语格式保存和恢复日期时间 无需任何转换 sql server中的datetime2类型可
  • Html.DropDownList 选择的值无法使用 ViewBag 工作

    好吧 经过几个小时阅读这里的内容 尝试所有解决方案均未成功 还发现本文我以为这会救我的命 什么也没有 长话短说 这是我的视图 所有组合 Html DropDownList yearDropDown IEnumerable
  • 有没有办法备份 Visual Studio Team Services 项目?

    我提倡使用 Visual Studio Team Services 作为我们的源代码控制解决方案 并且实际上已经开始这样做了 然而 我的经理对云托管存储和服务有些担心 他想知道在团队服务因任何原因无法访问时我们的应急计划是什么 我已经指出
  • 如何删除圆内的一组网格点?

    我正在尝试创建一个网格网格 而没有一些落在具有指定坐标和半径的圆内的点 我无法减去落在圆圈内的网格点 这是我的代码 import math import numpy import matplotlib pyplot as plt N 50
  • 卷曲:(7)无法连接到本地主机端口8090:连接被拒绝

    需要帮忙 一直在尝试解决这个问题 但找不到答案 或者更确切地说 我还没有遇到任何答案 我有一个带有 NGINX 的 docker 容器 充当反向代理 适用于 Windows 的 Docker 版本 1 12 5 9503 upstream
  • Cygwin 命令未找到在 .bashrc 357\273\277 中发现错误字符

    我是 Cygwin 的新手 我刚刚安装了它并尝试设置一些简单的环境变量 但是 当我打开命令 shell 时 出现错误 357 273 277 command not found 我发现一篇文章讨论了问题是什么以及如何 发现 隐藏的坏性格 h
  • 如何在InnoSetup中只允许安装特定组件?

    所以问题是这样的 我在这里问了一个问题 如何只允许安装到特定文件夹 我怎样才能稍微修改它 例如 我有 3 个文件要安装 其中 2 个是可选的 并且只有在某个文件 文件夹存在时才可以安装 如果不满足条件 我想将在列表中选择它们的选项灰显 先感
  • 双卡双待安卓sdk

    sdk 默认 有什么方法可以处理双卡吗 市场上有许多双卡双待的 Android 手机 我想要的是以编程方式更改默认的SIM卡 是否可以 从 Android 5 1 开始多卡支持已正式添加到Android SDK中 您可以通过以下方式访问有关
  • 使用 JQuery 从 Div 中删除 CSS

    在我的应用程序中 我有以下内容 displayPanel div live click function this css background color pink font weight bolder 当我点击一个 Div 时 该 Di
  • 删除美国州边界,在 ggplot2/geom_polygon 中创建轮廓区域

    我正在绘制下表 显示美国的多重耐药性趋势 按地区划分的 MDR 使用以下代码 states map m lt ggplot ncftrendsort aes map id region geom map aes fill ncftrends
  • Rails、Devise 和 Omniauth - 设置问题

    我正在尝试 再次 使用 Rails 4 devise 和omniauth 设置身份验证 我尝试按照这篇文章中的示例进行操作 Rails 4 Devise Omniauth 有多个提供商 我安装了这些宝石 gem devise gem omn
  • 相等比较在 TensorFlow 2.0 tf.function() 中不起作用

    继讨论之后TensorFlow 2 0 AutoGraphs 我一直在玩弄并注意到不平等比较 例如 gt and lt 直接指定 而相等比较则使用tf equal 这里有一个例子来演示 该函数使用 gt 运算符和效果很好当被调用时 tf f