- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在研究我的下一个项目。这是在一个预先规划阶段,所以这个问题只是为了了解现有技术。
设置
我有一个具有多个输入和输出的有向无环图 (DAG),现在考虑人工神经元网络:
处理这种结构的常用方法是在每个(时间)步长上处理整个网络。相信是 netwire
等frp库使用的方法.
现在我处于幸运的位置,我有一个事件流,每个事件都代表输入节点之一的变化。这个想法是,如果我可以静态地知道给定的更改只会影响其中的一部分,我可能不必遍历网络中的每个节点。
示例
在上图中,5、7 和 3 是输入,11 和 8 是“隐藏”节点,2、9 和 10 是输出节点。节点 5 处的更改只会影响节点 11,实际上会影响节点 2、9 和 10。我不需要处理节点 7、3 和 8。
目标
以尽可能少的延迟处理此类网络。图的大小可能会达到 10 万个节点,每个节点进行适度的计算。
计划
我希望有人站出来宣传刚刚完成工作的图书馆 X。
否则,我目前的计划是从图形描述中导出每个输入节点的计算。可能我会用 Par
monad,这样我就不必自己处理数据依赖性,并且仍然可以从多核机器中受益。
问题
Par
计划可行吗?这在多大程度上取决于每个节点所需的处理量? 最佳答案
像这样的问题通常针对 Applicative
进行编码。或 Arrow
抽象。我只讨论Applicative
. Applicative
类型类,在 Control.Applicative
中找到, 允许通过 pure
提供值和函数和应用于值的函数 <*>
.
class Functor f => Applicative f where
-- | Lift a value.
pure :: a -> f a
-- | Sequential application.
(<*>) :: f (a -> b) -> f a -> f b
Applicative
(用加法替换每个节点)作为
example1 :: (Applicative f, Num a) => f a -> f a -> f a -> f (a, a, a)
example1 five seven three =
let
eleven = pure (+) <*> five <*> seven
eight = pure (+) <*> seven <*> three
two = pure id <*> eleven
nine = pure (+) <*> eleven <*> eight
ten = pure (+) <*> eleven <*> three
in
pure (,,) <*> two <*> nine <*> ten
Applicative
编码的网络,您可能希望无法实现三种优化。 .一般策略是根据
Applicative
对问题进行编码。以及优化或额外功能所需的一些额外类。然后提供一个或多个实现必要类的解释器。这使您可以将问题与实现分开,允许您编写自己的解释器或使用现有的库,如
reactive ,
reactive-banana , 或
mvc-updates .我不打算讨论如何编写这些解释器或将这里给出的表示调整到特定的解释器。我将只讨论为了让底层解释器能够利用这些优化而需要的程序的通用表示。我链接的所有三个库都可以避免重新计算值,并且可以进行以下优化。
eleven
只定义一次,但在三个不同的地方使用。
Applicative
的实现将无法通过参照透明看到这三个
eleven
s 都是一样的。您可以假设该实现使用了一些
IO magic to peek through referential transparency或者定义网络,以便实现可以看到正在重用计算。
Applicative
的类
Functor
s 其中一个计算的结果可以被分割并在多个计算中重用。这个类没有在我知道的任何地方的库中定义。
class Applicative f => Divisible f where
(</>) :: f a -> (f a -> f b) -> f b
infixl 2 </>
Divisible
Functor
作为
example2 :: (Divisible f, Num a) => f a -> f a -> f a -> f (a, a, a)
example2 five seven three =
pure (+) <*> five <*> seven </> \eleven ->
pure (+) <*> seven <*> three </> \eight ->
pure id <*> eleven </> \two ->
pure (+) <*> eleven <*> eight </> \nine ->
pure (+) <*> eleven <*> three </> \ten ->
pure (,,) <*> two <*> nine <*> ten
a * b * b⁻¹ = a
减法是加一个数的倒数,这个倒数允许我们从总数中删除先前添加的数
a * b = b * a
无论执行顺序如何,加法和减法都会得到相同的结果。这让我们在减去旧值并将新值添加到总数中时,即使旧值不是最近添加的值也能达到相同的结果.
a * (b * c) = (a * b) * c
可以在任意分组中执行加法和减法,并且仍然达到相同的结果。这让我们在减去旧值并将新值添加到总数时得到相同的结果,即使旧值是在加法中间的某个地方添加的。
data Abelian a = Abelian {
id :: a,
inv :: a -> a,
op :: a -> a -> a
}
class Total f where
total :: Abelian a -> [f a] -> f a
Bool
或者回应是平等的。以下是可以利用平等的结构类别。
stabilize
提供
Eq
实例到底层结构。
class Stabilizes f where
stabilize :: Eq a => f a -> f a
关于haskell - 如何从有向无环图导出 FRP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25787665/
尝试从环的底部到顶部裁剪一个环 (50%),但结果并不像我预期的那样有效。 我的解决方案是 using bg_point_type = boost::geometry::model::d2::poin
上下文 我查看了 Google 上“Clojure、Ring、SSL”的前三个结果,对于使用 Clojure + Ring 设置 SSL 的“正确方法”似乎没有达成共识。 问题: 理想的答案是以下形式
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: Create random number within an annulus 我想在 annulus 内获得一个统一
对于我的应用程序,我需要组织一个循环(环形)队列。这意味着任何已处理的消息都会立即进入队列末尾继续处理。 例如: 队列:A、B、C。 接收方处理 A。 队列:B、C、A。 2 和 3 应以原子方式执行
我有一些源,其坐标(xn,yn,zn)相对于环的中心C和沿着我的视线的单位 vector (ns_ux,ns_uy,ns_uz)。我想计算这些源是否分别穿过内半径和外半径分别为 9.5 和 10.5
我想为 iOS 制作一个应用程序,我在 cocos2d 方面有一定的专业知识。我搜索了很多,但我发现的只是使用 webkit 实现此动画的 CSS,除了 C、Objective C、VHDL 之外,我
我有一个关于冷聚变和循环的问题。我有这个程序,我要求用户输入用户信息。用户可以为每种食物输入一些东西。 #GET_ITEM.ITEM_NBR#
安装后我遇到了 python key 环问题。这是我的步骤: $ python >>> import keyring >>> keyring.set_password('something','oth
我正在尝试从书中学习 MFC:MV C++ Windows Application by Example(2008)。有示例应用程序。我可以在其中绘制填充女巫所选颜色的戒指: void CRingVi
我正在寻求一些关于在 CSS 中创建“环形”形状的建议。以下是我需要实现的一些重要的详细目标: 环形边框粗细必须是百分比数字,而不是 rm 或绝对像素数,这样环形才能根据容器大小完全响应; 环形边框需
我真的很难掌握 Jade。我想做一些非常非常简单的事情:打印“一些文本”3次。我有一个 mixin 函数: mixin outputText() - for (var i = 0; i <= 3; i
如果用户已登录(即 session 的 user-id 键具有非零值),则路由到一个页面的最佳方法是什么;如果用户未登录,则路由到另一个页面的最佳方法是什么?理想的情况是有 2 组不同的路线。 谢谢!
我最近完成了一个程序,该程序将公钥下载到内存中,然后使用所有公钥创建一条加密消息。但是,我在创建仅包含我下载的 key 的列表时遇到了一些困难。首次下载时,它们存储在 gpgme_data_t 中。我
我需要在通过谷歌云运行的mysql中安装 key 环插件,但我不能,因为用户没有SUPER权限。有人遇到过同样的情况吗? mysql 安装插件 keyring_file SONAME 'keyrin
这是一个新手安全/控制台问题......我在我的项目中在欧洲的一个特定(错误)位置创建了一个 key 环。 我在控制台中看不到任何编辑甚至删除 key 环的方法。 key 圈完全是空的……里面没有 k
当我尝试从命令行(例如 svn)执行许多不同的操作时,我收到 gnome-keyring 警告。示例: $ lp README.txt WARNING: gnome-keyring:: couldn'
我的目标是使用 compojure 创建一个 Web 应用程序并附加 datomic 作为数据库。单独来看,这两个组件工作得很好。但是,当我尝试启动服务器时leinring server-headle
设置: 使用 GnuPG 的 Linux 或使用 GPG4Win(OpenPGP) 的 Windows 2048 RSA key 对已由可以访问 key 环的特权用户创建 已创建第二个较低权限的用户,
要创建加密表,可以使用以下查询: CREATE TABLE `t1` ( `intcol1` int(32) DEFAULT NULL, `intcol2` int(32) DEFAULT N
我对 Spring 框架很陌生。 我尝试迭代列表中的 10 个项目。我使用 thymeleaf 模板。 这是我的代码; 此代码无法正常工作,我找不到运行该代码的方法。 感谢您的关
我是一名优秀的程序员,十分优秀!