gpt4 book ai didi

struct - Racket 结构错误 : given value instantiates a different structure type with the same name

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:36 24 4
gpt4 key购买 nike

我非常熟悉 Racket,以及 Scheme 和 Lisp 家族中的许多人,但我不知道这个错误是怎么回事,或者是什么导致了它:

network-biases: contract violation;
given value instantiates a different structure type with the same name
expected: network?
given: (network ...) <-- I omitted this because its useless.

这是错误所在的函数(其余的我有一个 gist):

(define (update-mini-batch net mini-batch eta)
(define nabla-b (map (lambda (b)
(apply grid (shape b))) (network-biases net)))
(define nabla-w (map (lambda (w)
(apply grid (shape w))) (network-weights net)))

(define-values (nabla-b-new nabla-w-new)
(foldl (lambda (lst bw)
(define x (first lst))
(define y (second lst))
(define-values (nabla-b nabla-w) bw)
(define-values (delta-nabla-b delta-nabla-w) (backprop net x y))

(define nabla-b-new (+/ nabla-b delta-nabla-b))
(define nabla-w-new (+/ nabla-w delta-nabla-w))
(values nabla-b-new nabla-w-new)) (values nabla-b nabla-w) mini-batch))

(struct-copy network net
[biases (map (lambda (b nb)
(- b (* nb (/ eta (length mini-batch)))))
(network-biases net) nabla-b-new)]
[weights (map (lambda (w nw)
(- w (* nw (/ eta (length mini-batch)))))
(network-weights net) nabla-w-new)]))

我无法获得实际引发错误的 MCVE,所以我没有提供。

我在上述函数中尝试做的事情的提炼基础是:

  • 计算结构属性的新值,并使用这些新属性创建新结构。

- 谢谢!!

最佳答案

Racket 中的结构是生成的。这意味着每次

(struct network (num-layers sizes biases weights) #:transparent)

运行时,创建了一种新型结构。这些都是命名网络。

您看到的错误消息通常是由于对结构定义进行了两次计算(这有点令人困惑,因为这两种类型具有相同的名称)。

我在您的代码中看不到任何可能导致 (struct network ...) 运行两次的地方。您使用的是 DrRacket 还是不重置命名空间的替代环境?

如果我打开“nn.rkt”并运行它,我会看到错误吗?

关于struct - Racket 结构错误 : given value instantiates a different structure type with the same name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32791108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com