【发布时间】:2018-07-15 16:48:06
【问题描述】:
我正在使用 haskell 编写神经网络。我的代码基于此 http://www-cs-students.stanford.edu/~blynn/haskell/brain.html 。 我通过以下方式调整了前馈方法:
feedForward :: [Float] -> [([Float], [[Float]])] -> [Float]
feedForward = foldl ((fmap tanh . ) . previousWeights)
previousWeights 是:
previousWeights :: [Float] -> ([Float], [[Float]]) -> [Float]
previousWeights actual_value (bias, weights) = zipWith (+) bias (map (sum.(zipWith (*) actual_value)) weights)
我真的不明白 fmap tanh . 从我读到的 fmap 应用于两个函数就像一个组合。如果我将fmap 更改为map,我会得到相同的结果。
【问题讨论】:
-
对于列表
fmap = map。fmap是map的泛化。 -
fmap等于map用于列表,请参阅learnyouahaskell.com/…,查找fmap = map -
(fmap tanh .)给你(Floating b, Functor f) => (a -> f b) -> a -> f b如果你使用地图将它限制在列表中,你会得到(map tanh .) :: Floating b => (a -> [b]) -> a -> [b] -
对于
(.) .看看this question -
(fmap tanh . ) . previousWeights是写\x y -> map tanh (previousWeights x y)的复杂方式。因此,它会生成之前的权重,然后取每个权重的 tanh。
标签: haskell neural-network feed-forward