我想使用 Haskell 编写的 Grenade 深度学习库为自动编码器创建一个网络。
它应该学会用 200 位的层来表示 265 位的输入。
因此,我声明了类型:

type Auto =
  Network
    '[ FullyConnected 265 200, Relu, FullyConnected 200 265, Relu]
    '[ 'D1 265, 'D1 200, 'D1 265]

但是,当我尝试为这种类型生成随机网络时
randomAuto :: MonadRandom m => m Auto
randomAuto = randomNetwork

我收到这样的类型错误:
Could not deduce (Layer Relu ('D1 200) ('D1 265)) arising from a use of ‘randomNetwork’

这肯定是因为维度 1 的唯一 Relu 实例被声明为
KnownNat i => Layer Relu (D1 i) (D1 i)

要求输入和输出的大小相同。

但是你如何用这个库创建一个自动编码器呢?

最佳答案

看起来激活函数在这个库中算作“层”(不改变维度)。所以复制对应于 relu 层的维度:

type Auto =
  Network
    '[ FullyConnected 265 200, Relu, FullyConnected 200 265, Relu]
    '[ 'D1 265, 'D1 200, 'D1 200, 'D1 265, 'D1 265]

关于haskell - 使用 Haskell Grenade 为自动编码器建模,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46104942/

10-13 03:08