首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >推荐的ILNumerics优化包

推荐的ILNumerics优化包
EN

Stack Overflow用户
提问于 2013-08-26 14:53:11
回答 2查看 579关注 0票数 2

我开始编写我自己的机器学习包,采用ILNumerics。

我肯定会进入神经网络,支持向量机,核方法,然后我将开始进入一个更贝叶斯的框架。

我知道ILNumerics已经提供了一些“机器学习工具箱”,但是我想添加我的贡献并编写我自己的算法,这也是因为一些特性还没有出现(?)

首先,如果我理解得很好,到目前为止还没有包含优化包。我希望我错了;如果不是这样的话,任何关于如何通过ILNumerics实现它的建议都会受到高度赞赏;因此,我的意思是:混合预先存在的代码会影响性能?是否建议将ILArray和其他向量/矩阵混合?坚持快速指南中提供的建议就足以充分利用优秀的业绩了吗?

或者,如果您愿意,您会推荐与ILNumerics一起使用的预先构建的可用优化包/库吗?

非常感谢你的建议和建议,

总帐

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-27 07:57:58

你在所有方面都是对的。目前ILNumerics中没有优化包。但是,正如您所知道的,.NET的一个主要优点是易于集成外部包。这里有几种选择:

PInvoke (本机模块)

因为大多数现有的优化包都是作为本机模块存在的,所以PInvoke是您的朋友。有几种用于自动生成DLLImport签名的工具。就我个人而言,我更喜欢创建这些签名手动。特别是,由于大多数科学包公开了一个很容易集成到.NET中的简单签名,因此从本机回调到托管代码以及复杂结构的编组可能会出现问题。(所以我们会帮你解决所有的问题.

.NET模块

您可以找到一个现有的.NET优化模块。请参阅此帖子(C#中的免费优化库)或尝试。更好的模块可能已经存在-我已经有一段时间没有寻找了。除非非常小心地执行实现,否则由于内存管理不善(无),它们可能会或不会在性能上受到影响。(据我所知,没有其他项目能像ILNumerics那样有效地跟踪内存?)。但是,对这些库进行接口很容易:不需要DLLImport签名。但是,为了从ILNumerics内存管理中获益,您必须在'ILNumerics‘端管理数组内存。因此,将一些System.Array提供给其他一些.NET函数的模式是:

代码语言:javascript
复制
 .... inside ILNumerics function
 using (ILScope.Enter(inparameter1,inparameter2)) {
    ....
    ILArray<double> A = zeros(1000,1000);  // allocate memory for external use
    var aArray = A.GetArrayForWrite();     // fetch reference to underlying System.Array  
    callOtherLib(aArray);                  // let other lib use and fill the array
    // proceed normally with A... 
    return A + 1 * 2 ... ; 
 }

如果另一个库仅从给定数组读取,A.GetArrayForRead()可能会提供更好的性能。通过使用该方案,确保了最有效的内存使用--至少在实现的ILNumerics端。

混合来自双方的数据结构不会有任何害处--但通常也不会带来太大的好处:这通常减少了方便的语法,因为混合矩阵实现没有组合运算符。而且,您通常会被迫分解对元素级操作的矩阵访问,这些操作可能导致一个性能较差的解决方案。因此,我建议采用带有明确分离API的模块化设计。

上述内存方案也适用于本机库的接口(并推荐)。

仅使用ILNumerics

另一种方法--当然--是使用ILNumerics内置函数和数组特性,自行重新实现某些模块。为了将任何包合并到正式的ILNumerics发行版中,这种方式是必须的。它具有以下几个优点:一是可以利用方便的ILNumerics语法,自动从高效的ILNumerics内存管理中获益,最终代码将完全独立于平台。此外,对于算法所需的特性,这给您提供了最大的灵活性。

票数 2
EN

Stack Overflow用户

发布于 2013-08-27 09:52:03

一些更有趣的包:http://numerical.codeplex.com/http://www.alglib.net/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18447022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档