我对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.下面是错误所在的函数(我有一个其余的要旨 ):
(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实际上抛出了一个错误,所以我没有一个可以给予。
在上面的函数中,我试图做的基本工作是:
发布于 2015-09-25 22:21:02
球拍中的结构是生成性的。这意味着每次
(struct network (num-layers sizes biases weights) #:transparent)运行时,将创建一个新的结构类型。这些都被命名为网络。
您所看到的错误消息通常是由于对结构定义进行了两次计算(而且由于这两种类型的名称相同,所以有点混乱)。
在您的代码中,我看不到任何可能导致(struct network ...)两次运行的地方。您是在使用DrRacket还是不重置命名空间的替代环境?
如果我打开"nn.rkt“并运行它,我会看到错误吗?
https://stackoverflow.com/questions/32791108
复制相似问题