如何在haskell中使用fmap的随机生成器使用函数?

栏目: 编程语言 · 发布时间: 7年前

内容简介:翻译自:https://stackoverflow.com/questions/42078395/how-to-use-a-random-generator-using-function-with-fmap-in-haskell
我正在研究进化神经网络,并且正在使用HNN.我的第一个问题是 Haskell

中是否存在任何进化算法框架,因为我无法找到任何?

我目前正在努力寻找一种以一般方式改变神经网络权重的方法.目前,我试图在权重的HMatrix上映射随机函数(形式(RandomGen g)=> g – > a – >(b,g)).

我想要一种通用的方法来修改现有的fmap(或fold?),以便在可以完成的情况下使用随机函数.例如,我可能有一个函数可能会或可能不会向其输入添加一些高斯噪声,并希望将其应用于整个网络.我遇到的问题是如何使用随机数生成器.

对于地图,我目前正在执行以下操作:

rmap :: (StdGen -> a -> (b,StdGen)) -> StdGen -> [a] -> ([b],StdGen)
rmap _ g [] = ([],g)
rmap f g (x:xs) = let (mapped, g') = rmap f g xs
                      (rVal, g'')  = f g' x
                   in (rVal:mapped, g'')

这对我来说似乎是一个黑客攻击,我希望一些更好的haskellers可能会对如何更有效地处理这种随机性提出一些建议?

这就是 Traversable 课程的用途. mapAccumL (以及它的从后到前的双胞胎 mapAccumR

)是一个高阶函数,它捕获一种广义的折叠和映射操作,在可遍历的结构上有状态地工作并转换元素.你的随机映射函数是这种模式的一个例子 – 正如你所看到的,mapAccumL的类型非常接近你的函数类型:

mapAccumL :: Traversable t => (a      -> b -> (a, c))      -> a      -> t b -> (a, t c)
rmap      ::                  (StdGen -> a -> (b, StdGen)) -> StdGen -> [a] -> ([b], StdGen)

我们可以设置t~ []和~StdGen,这样在一些元组翻转之后,rmap基本上是mapAccumL的另一个名字.

rmap f z = swap . mapAccumL (\x y -> swap (f x y)) z

翻译自:https://stackoverflow.com/questions/42078395/how-to-use-a-random-generator-using-function-with-fmap-in-haskell


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C语言算法速查手册

C语言算法速查手册

程晓旭、耿鲁静、张海、王勇 / 2009-10 / 49.00元

《C语言算法速查手册》用C语言编写了科研和工程中最常用的166个算法,这些算法包括复数运算、多项式的计算、矩阵运算、线性代数方程组的求解、非线性方程与方程组的求解、代数插值法、数值积分法、常微分方程(组)初值问题的求解、拟合与逼近、特殊函数、极值问题、随机数产生与统计描述、查找、排序、数学变换与滤波等。同时结合这些算法列举了将近100个应用实例,对其进行验证和分析。 《C语言算法速查手册》适......一起来看看 《C语言算法速查手册》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具