问题标签 [generic-derivation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7256 浏览

json - 如何在不消除对象歧义的情况下使用 circe 解码 ADT

假设我有这样的 ADT:

circeDecoder[Event]中实例的默认泛型派生期望输入 JSON 包含一个包装器对象,该对象指示表示哪个案例类:

这种行为意味着如果两个或多个案例类具有相同的成员名称,我们永远不必担心歧义,但这并不总是我们想要的——有时我们知道展开的编码是明确的,或者我们想通过指定顺序来消除歧义每个案例类都应该尝试,否则我们根本不在乎。

如何Event在没有包装器的情况下编码和解码我的 ADT(最好不必从头开始编写我的编码器和解码器)?

(这个问题经常出现——例如今天早上在 Gitter 上与 Igor Mazor 的讨论。)

0 投票
2 回答
109 浏览

c# - C# - 在派生上下文中调用派生基方法

试图搜索网络,但到目前为止什么也没找到,所以我的问题是:

我想通过不同成员的属性来索引模型信息。为此,我在基类中创建了一个函数,该函数在调用时收集所有需要的信息。这种方法被派生到不同的模型中,以便它们都可以被索引。

在基类中,我调用了一个通用方法,该方法使我可以访问要保存在那里的特定模型的索引服务器

我目前遇到的问题是,在调用工厂时,它会检索基类的信息。

我想要完成的是这样的:

我的 indexFacade 持有的类型

我知道这里的多态性以及为什么会发生这种情况。

我的问题是:我怎么打电话

以便调用它的上下文不是来自基类而不覆盖它?

更多信息:

调用的方法如下所示:

T的类型为Base

模型的类型为Derived

也许这可以解决一些问题。

我回来了:

我需要回来:

提前感谢所有帮助。

0 投票
1 回答
531 浏览

neural-network - 关于NN残差层反向传播推导的说明

我到处寻找,找不到任何解释残余层反向传播的实际推导的东西。这是我最好的尝试,也是我陷入困境的地方。值得一提的是,我希望的推导是从一个通用的角度来看的,而不必局限于卷积神经网络。

如果计算普通隐藏层输出的公式是 F(x),那么带有残差连接的隐藏层的计算公式是 F(x) + o,其中 x 是前一层的权重调整输出,o 是前一层的输出,F 是激活函数。要在反向传播期间获得正常层的增量,需要计算输出的梯度∂F(x)/∂x。对于残差层,这是∂(F(x) + o)/∂x,可分离为∂F(x)/∂x + ∂o/∂x (1)。

如果所有这些都是正确的,那么如何处理∂o/∂x?在我看来,这取决于网络 o 来自多远。

  • 如果 o 仅来自前一层,则 o*w=x 其中 w 是将前一层连接到 F(x) 层的权重。对每一边求导得到 ∂(o*w)/∂o = ∂x/∂o,结果是 w = ∂x/do,这正好是 (1) ) 多于。在这种情况下,残差层的梯度只是 ∂F(x)/∂x + 1/w 是否有意义?将 1/w 解释为矩阵逆是否准确?如果是这样,那么实际上是由使用残差连接的 NN 框架计算的,还是有一些捷径可以从残差中添加误差?

  • 如果 o 来自网络中更远的地方,那么我认为推导会变得稍微复杂一些。这是一个示例,其中残差来自网络中更靠后的一层。网络架构为 Input--w1--L1--w2--L2--w3--L3--Out,从 L1 到 L3 层有残差连接。为了明确起见,第一个示例中的符号 o 被层输出 L1 替换。我们试图在反向传播期间计算 L3 的梯度,它具有 F(x)+L1 的前向函数,其中 x=F(F(L1*w2)*w3)。这个关系的导数是∂x/∂L1=∂F(F(L1*w2)*w3/∂L1,比较复杂,但是用数值求解似乎也不是太难。

如果上述推导是合理的,那么值得注意的是,存在推导失败的情况,即残差连接源自输入层。这是因为输入不能分解为 ao*w=x 表达式(其中 x 是输入值)。我认为这一定表明残差层不能源自输入层,但是由于我已经看到具有源自输入的残差连接的网络架构图,这使我的上述推导受到质疑。我看不出我哪里出错了。如果有人可以提供他们如何正确计算残差合并点的梯度的推导或代码示例,我将不胜感激。

编辑:

我的问题的核心是,在使用残差层并进行香草反向传播时,是否对添加残差的层的误差进行了特殊处理?由于残差来自的层和添加残差的层之间存在“连接”,因此错误是否需要通过该“连接”向后分布?我的想法是,由于残差层提供了从网络开始到更深层的原始信息,因此更深的层应该为更早的层提供原始错误。

根据我所看到的(阅读 googleable 论坛的前几页、阅读基本论文和观看视频讲座)和下面 Maxim 的帖子,我开始认为答案是∂o/∂x = 0 并且我们将 o 视为常数。

有没有人在通过带有剩余层的 NN 进行反向传播期间做任何特别的事情?如果不是,那么这是否意味着残差层仅在前向传递中是网络的“活跃”部分?

0 投票
1 回答
572 浏览

scala - 将 Magnolia 与 Circe 的自动推导技巧相结合

我有一个类型类,想为用户提供半自动和自动派生。我有一个基于Magnolia的工作实现,它运行得非常好。有一个 trait 为,和提供定义,那么这两种类型的派生都可以通过Typeclass[A]combine[A]dispatch[A]

没什么好惊讶的。不足为奇的是,当用户auto._进入范围时,它会掩盖为特定类型编写的有效派生。

我希望我可以使用 Travis Brown 为 Circe 设计的相同技术,它的工作原理基本上是这样的:

定义一个可以保存任何值的占位符值类

当该类的值在范围内时,为我的类型类提供低优先级自动派生

最后,隐藏导出对象的自动派生auto

遗憾的是,在尝试调用宏时出现编译错误:

我看这段代码太久了,找不到出路;任何帮助将不胜感激。

0 投票
1 回答
918 浏览

json - 具有自定义表示的 Scala 中 ADT 的通用派生

我在这里转述来自 circe Gitter 频道的一个问题

假设我有一个像这样的 Scala 密封特征层次结构(或 ADT):

…并且我希望能够在此 ADT 和 JSON 表示之间来回映射,如下所示:

默认情况下,circe 的泛型推导使用不同的表示:

我们可以更接近 circe-generic-extras:

接着:

……但这仍然不是我们想要的。

使用 circe 为 Scala 中的 ADT 通常派生这样的实例的最佳方法是什么?

0 投票
1 回答
810 浏览

json - 使用鉴别器编码 ADT 案例类,即使键入为案例类

假设我在 Scala 中有一个 ADT:

我想将此类型的值编码为如下所示的 JSON:

幸运的是,这正是编码 circe 的通用派生提供的!

问题在于,circe 使用的编码器取决于我们正在编码的表达式的静态类型。这意味着如果我们尝试直接解码其中一个案例类,我们会丢失判别器:

…但Base即使静态类型为Foo. 我知道我可以为所有案例类定义显式实例,但在某些情况下我可能有很多,我不想枚举它们。

(请注意,这是一个多次出现的问题——<a href="https://gitter.im/circe/circe?at=5bc72f4ec08b8b30672b396c" rel="noreferrer">例如这里。)

0 投票
1 回答
679 浏览

json - 是否可以让半自动解码器考虑案例类字段的默认值?

是否可以让半自动解码器考虑案例类字段的默认值?

以下代码将失败:

Left(DecodingFailure(Attempt to decode value on failed cursor, List(DownField(isActive))))

我认为 circe 会考虑案例类字段的默认值isActive

0 投票
1 回答
2250 浏览

json - 在编译时不知道密钥的情况下解码 JSON 值

假设我一直在使用这样的 JSON:

通过将其解码为这样的 Scala 案例类:

这适用于 circe 的泛型推导:

现在假设我想将本地化信息添加到表示中:

我不能通过泛型派生直接使用这样的案例类:

…因为语言标签是一个键,而不是一个字段。我怎样才能做到这一点,最好没有太多的样板?

0 投票
1 回答
395 浏览

scala - 如何在 Circe 中使用半自动解码通用案例类

我有以下案例类:

它适用于自动推导。

但我无法解决它进行半自动推导。

这是我的测试用例:

这给了我:

0 投票
0 回答
125 浏览

scala - 如何访问案例类字段的默认值?

我想Decoder[A]为任意案例类派生某种类型 () 的实例shapeless

如果我不考虑案例类的默认值,那么使用基本方法一切都会顺利:

现在我希望能够为无法解码的字段使用默认值。在这种情况下,我尝试了这种方法(添加额外的抽象层):

所以,我的问题是:是否有可能实现相同但不使用额外的抽象层(就像DecoderWithDefaults在这种情况下)?就像是: