为什么 keras 使用“call”而不是 __call__?

2024-03-18

我喜欢以下代码(https://www.tensorflow.org/tutorials/eager/custom_layers https://www.tensorflow.org/tutorials/eager/custom_layers)

class MyDenseLayer(tf.keras.layers.Layer):
  def __init__(self, num_outputs):
    super(MyDenseLayer, self).__init__()
    self.num_outputs = num_outputs

  def build(self, input_shape):
    self.kernel = self.add_variable("kernel",
                                shape=[int(input_shape[-1]),
                                       self.num_outputs])

  def call(self, input):
    return tf.matmul(input, self.kernel)

最后两行是call方法,但它不像通常的python类方法call有两个下划线。它们之间有什么区别吗?


以下答案基于https://tf.wiki/zh/basic/models.html https://tf.wiki/zh/basic/models.html.

基本上在Python中,当你从类中调用实例时ClassA using ClassA(),它相当于ClassA.__call__()。所以使用似乎合理__call__()代替call()在这种情况下,对吧?

然而,我们使用的原因call()就是那个时候tf.keras称为模型或层,它有自己的内部操作,这对于保持其内部结构至关重要。结果,它暴露了一个方法call()用于自定义重载。__call__() calls call()以及一些内部操作,所以当我们超载时call()继承自tf.keras.Model or tf.keras.Layer,我们可以调用我们的自定义代码,同时保持tf.keras的内部结构。

例如,根据我的经验,如果您的输入是 numpy 数组而不是张量,那么如果您在中编写自定义代码,则不需要手动转换它call()但如果你覆盖__call__(),这将是一个问题,因为某些内部操作未被调用。

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

为什么 keras 使用“call”而不是 __call__? 的相关文章

随机推荐

  • 使用 ggplot2 将带有文本的图像作为刻度标签

    如何使用以下命令将本地图像文件作为刻度标签和国旗下的国家 地区名称ggplot2 我想实现这样的目标 数据如下 countries c Norway Spain Germany Canada China values c 10 20 30
  • 如何在javascript中计算LaTeX公式?

    我有 LaTeX 格式的 JavaScript 字符串 例如 frac y 2 2 x frac 2 sqrt y 2 x y 2 我希望能够用定义的变量来评估它 有谁知道用于此目的的框架或库 我尝试在谷歌和堆栈中找到它 但没有成功 如果您
  • AttributeError:“模块”对象没有属性“newperson”

    我目前正在学习 python 编程 并且是初学者 目前我陷入了文件练习 所以这些是我需要做的设定事情 而不是做我想做的任何事情 不幸的是 这也意味着我可能无法做任何复杂的 对我来说 快捷方式 目前使用Python 3 2 2 我需要两个不同
  • Javascript ES6 中注册表符号 (Symbol.for) 的用途是什么?

    有这样一件事registryJS ES6 中的符号 发现在这篇 Mozilla 文章中 https hacks mozilla org 2015 06 es6 in depth symbols 它不同于Symbol Stack Overfl
  • Xcode 4 中的 openssl 库

    正如标题所示 我正在努力将 openssl 库包含在我的 xcode iOs 项目中 例如 include
  • 如何在 CMake 中将多个库目标分组为一个

    我正在尝试将多个目标分组为一个目标 以便下游用户只需要链接到该单个目标 下游用户不需要查找所有目标 并且上游库中的所有功能都可以通过链接到该目标来使用 请参阅下面我失败的尝试的 CMakeLists cmake minimum requir
  • Hovertemplate 在绘图中与 add_trace() 一起使用时显示数据两次

    我使用以下方法创建了分组条形图plotly 问题是在我的hovertemplate为了追踪我得到一个白色的盒子LA ZOO这似乎是不必要的 我想摆脱它 Animals lt c giraffes orangutans monkeys SF
  • MSDeploy 是否足够“友好”,或者可以将其封装在 MSI 文件中

    您认为 MSDeploy 包是让最终用户在其系统上安装 Web 应用程序的一个不错的选择吗 与使用 MSI 文件安装 Web 应用程序的体验相比如何 有人尝试过将 MSDeploy 包封装在 MSI 包中吗 会起作用吗 据我描述 MSDep
  • JavaFX 中加载器实例化抛出空指针

    我已经声明了两个 fxml 文件 并为每个文件声明了一个控制器 根布局控制器是一个控制器根布局 fxml and 概览控制器是一个控制器概述 fxml rootlayout 有带有文件打开项的菜单栏 overviewcontroller 有
  • Visual C++ 2012 cout 在运行时崩溃

    我今天决定尝试一下 Visual Studio 2012 Express 首先要做的就是写 Hello world 但是 我无法使其工作 我创建了一个 Windows 控制台应用程序项目 编写了标准代码 但导致了运行时错误 这是我的代码 i
  • Azure 上的 React + Express:无效的主机标头

    错误 当部署到具有多容器支持的 Azure Web Apps 时 我收到 无效的主机标头 消息来自https mysite azurewebsites com https mysite azurewebsites com 本地设置 这运行良
  • 无法在 Jenkins 上找到 TFS 插件 [重复]

    这个问题在这里已经有答案了 无法找到适用于 Jenkins 的 TFVC 或 Azure DevOps 和 Team Foundation Server 插件 詹金斯版本 2 263 1 由于安全漏洞 TFS 插件的官方分发已暂停 在 Je
  • 空值 - 布尔表达式

    所以我有一个关于考试作业的问题 在这个作业中我们有一堆布尔表达式 例如 FALSE OR NULL NULL 然后我们需要写出布尔表达式的值 为此 我使用了三值逻辑 但是当您获得如下布尔表达式时 它如何应用 NULLL AND TRUE O
  • 如何使用 sql 查询将数据库的子集提取到 dbunit 文件中?

    Why 我有一个很大的 Oracle 表 我想测试一些 DAO 方法 为此 我使用 dbunit Problem 我想使用 sql 查询将现有数据库的子集提取为 dbunit 平面 xml 文件 查询示例 Select t1 field1
  • spring任意消息传递tcp套接字

    我正在使用 spring integration 开发定制的双向 TCP 套接字服务器 服务器将处理请求 响应任务 但我无法向特定的连接 ID 发送任意消息 我也知道也许使用TcpSendingMessageHandler and TcpR
  • 如何在Python Flask中定位项目的for循环

    所以 我在烧瓶中有一个项目的 for 循环 我正在尝试找到一种方法将它们放置在页面上 我在引导卡中有一个任务的 for 循环 当用户创建卡片时 卡片变得非常愚蠢 并且定位变得非常奇怪 截图 https ibb co hRjCrFf 老师作业
  • 如何使用 GitHub API 确定提交属于哪个 Pull Request?

    给定提交 SHA 我想使用 GitHub API 来确定它属于哪个拉取请求 GitHub 在上显示此信息提交页面 https github com hammerlab pileup js commit ee49f07dba3821109b3
  • 获取MySQL语句的精确执行时间

    现在的结果表明 集合中的 X 行 0 00 秒 所以我想知道是否有办法可以得到小数点后两位以上的时间 Execute set profiling 1在运行语句之前 然后获取计时show profiles query See 显示配置文件语法
  • Powershell 匹配属性,然后有选择地组合对象以创建第三个

    我对此有一个解决方案 但我相信这不是最好的方法 因为它需要永远 所以我正在寻找更快 更好 更智能的方法 我有多个从 csv 文件中提取的 pscustomObject 对象 每个对象至少有一个共同属性 一个相对较小 对象中大约 200 30
  • 为什么 keras 使用“call”而不是 __call__?

    我喜欢以下代码 https www tensorflow org tutorials eager custom layers https www tensorflow org tutorials eager custom layers cl