Golang机器学习的发展前景探讨

Golang机器学习的发展前景探讨 大家好。作为一名数据科学家,我对机器学习很感兴趣。我看到 Go 语言中有一些机器学习包,但它们似乎没有积极开发,有些甚至似乎不再维护。不久前,Tensorflow 还支持 Go,但现在不再支持了。因此,我在想 Go 是否有机会开始在机器学习社区中扮演重要角色,但就目前而言,恐怕情况并非如此。这里有没有人对此有更多了解,可以分享一下他们的想法?我将不胜感激。

12 回复

我不是机器学习专家,但在Tensorflow的网站上你可以找到一个指向Go绑定的链接。

它不能用吗?

更多关于Golang机器学习的发展前景探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我猜你已经看过Gorgonia了。

Gorgonia的作者/创建者 @chewxy 写了几本关于使用Go进行机器学习的书。也许他能在这里提供更多见解。

是的,这或许是一个例外,因为它看起来是一个持续维护和开发的包。不过,我不确定仅凭一个活跃的包是否足以让Go成为机器学习领域的重要参与者。我还没有使用过它,所以尚不清楚它在机器学习方面的深入程度,但我打算探索一下。感谢Samyak的分享!

这对你有帮助吗?

图片

Go 语言中排名前 8 的机器学习库

Go 是由谷歌研究人员创建的一种流行的开源编程语言。该语言包含许多直观的特性。

我很难理解你发这个帖子的动机。如果有用Go编写的库你想用,那就用。如果没有,而你有知识和意愿去创建它,那就创建它。如果你已经在使用用Python编写的、能正常工作的东西,那就继续使用它,除非你有理由不这么做。如果你对Gorgonia感兴趣,那就试试看。

没有人能预测未来。作为一名数据科学家,我想你和任何人一样都明白这一点。

非常感谢,肖恩。但坦率地说,这篇帖子没有帮助。网络上充斥着类似的帖子,但它们甚至具有误导性。它们遗漏了硬币的重要一面,也就是我提到的那一面——它们将这些包描述为绝佳的选择,但却忽略了我所写的内容,即它们并不活跃,或者不再维护,或者考虑到我们在机器学习社区(例如在Python中)看到的情况,它们的开发速度非常缓慢。正是基于这些包,我才形成了我的主要观点:Go语言中的机器学习看起来并不乐观。

谢谢,Massimo。正如我所说,TensorFlow 曾经支持 Go 绑定,但现在不再支持了。看这里:https://www.tensorflow.org/api_docs/。你会看到一些令人遗憾的事情(至少对我来说是这样): image 所以,我认为绑定功能仍然有效,但不再维护,因此未来前景不明朗。

谢谢,Dean。是的,你明白我的意思。我同意,尽管我们始终需要记住,机器学习组件始终只是整个应用程序的一个组成部分。当然,我们可以为一个应用程序使用多种语言,但坦率地说,只要能用一种语言代替两种,我就会选择这种方式。因此我正在考虑Go,因为我认为用它编写应用程序通常比用Python好得多。但话又说回来,如果这是一个机器学习应用程序,那么也许Python更好?

我很乐意看到Go中有更多的机器学习包,也很乐意看到它们得到积极的维护和开发。因此我提出了这个问题。我对Go还比较陌生,所以想请教一下那些更有经验和知识的人对此的看法。

我理解你帖子背后的情绪:你不想采用一个库,然后它的创建者就将其弃之不顾。我的观点是,你应该基于每个库的具体情况来评估,而不一定是基于每种语言。此外,你应该选择适合你团队的东西。考虑一下这篇关于数据科学的文章

我们的数据表明,在为机器学习和数据科学选择编程语言时,流行度并不是一个好的衡量标准。不存在所谓的“机器学习最佳语言”,一切都取决于你想构建什么、你来自哪里以及你为何涉足机器学习。

你有一个10人的团队,他们都懂Python并且有TensorFlow经验吗?那么Python/TensorFlow是显而易见的选择。Gorgonia正在积极维护,作者们似乎也致力于保持这种状态,但根据我的经验,团队的构成将是这里最重要的因素。

Nyggus, Dean,

在 Go 语言的早期阶段,人们对科学和数学领域有更多的兴趣。其卖点之一甚至是内置了复数支持。但我同意你们的评估,与其他一些顶级语言相比,Go 在数据科学(以及广义上的科学/数学)领域的社区活跃度较低。有时我也对此感到失望。举个例子,曾经有提议要从 Go 中移除复数类型,因为据说没人使用它们(除了我)。

我认为这背后有许多历史和社会经济原因,例如 Python 的 scikit 实际上很大程度上是基于古老的 C 语言构建的。那种代码库的积累需要时间。或者是云计算的爆炸式发展,以及我们内在的、倾向于将一种语言与特定类型的应用联系起来的思维定式。对我来说,Go 是科学计算领域的一次重新开始,并且具有非常适合科学计算的显著特点(例如,可以参考这个演讲)。

对我来说,目前仍然有一些成功的案例,比如 Gonum、bleve search、Gorgonia。此外,Google 云平台也有一些提供 Go 接口的机器学习基础设施。我很好奇这些后端是否有一部分是用 Go 写的,谁知道呢。有很多有趣的小型科学计算库,但你需要手头有一个非常具体的问题才能利用它们,而不是一个大项目。

Go 语言中的[数据]科学正在发展,我相信随着时间的推移,它会加速发展(原因类似于我上面链接的 gonum 演讲)。我也认为,帮助这种加速的最佳方式是我们作为个人,在合适的时候尝试用 Go 做一些科学计算相关的事情;同时,我们作为一个社区,应该更多、更显著地参与科学和教育机构的活动。

感谢迪恩的分享。我理解你的观点,有时我也会这样做。例如在概念验证项目中,选择哪个框架并没有太大区别。但我确实认为在生产项目中情况并非如此。那时这样的决策至关重要,错误的选择可能导致灾难,或者至少是问题。

如果一个包含机器学习组件的软件产品需要维护和开发多年(我参与过的所有此类产品都计划运行多年),那么你的选择就很重要。让我举个例子。四年前,我公司有人启动了一个与某种疾病相关的项目。随后项目进入了另一个阶段,针对另一种疾病。接着又是一个,再一个。四年过去了,软件已经发生了很大变化(总体而言,机器学习领域的变化更大)。每个新阶段都假设产品将被修改,而不是从头重写。许多工作已经完成,利益相关者不会为额外的工作付费,比如重写产品的重要部分(添加一种新疾病意味着修改现有代码)。想象一下,如果代码是使用一个在项目开始时就已经三年没有维护的机器学习库编写的。这将意味着我们现在将不得不使用已经7年历史的软件。这时间太长了,特别是考虑到现在有这么多其他选择,有这么多更新的解决方案。

这就是为什么我不同意你可以随意选择任何东西,并且我主张我们数据科学家应该做出明智的决策。这也是为什么我不同意我在这里发起的讨论缺乏动机。在我们公司,你不能随意选择任何框架。我们有一个受支持框架的列表,当我们想添加一个新项目时,人们会讨论它,尝试它,提供他们的意见。一段时间后,会决定该框架是否应该被支持,或者最好不要支持。我不会同意支持一个已经两三年没有维护的框架。而且我们谈论的是机器学习,这个领域近年来发展极其迅速。

没有人能预测未来吗?不能完全确定。但是我在许多使用时间序列预测的项目中工作过,这不就是在预测未来吗?有时我们会失败,但很多时候我们确实成功了,在我们的生活中,我们总是试图预测未来。

我想说,我们数据科学家应该能够选择这个框架,它不仅今天能为我们服务,明天也能——至少在我的公司这很重要,所以我真的认为这次讨论是有意义的。

从当前生态来看,Go在机器学习领域确实面临挑战。TensorFlow的Go绑定已停止更新,主流框架如PyTorch也未提供官方Go支持。Go的机器学习库如gorgoniagomind等活跃度较低,更新缓慢。

但Go在机器学习基础设施方面有独特优势。其并发模型和部署效率适合构建推理服务、数据管道和模型管理平台。例如,使用Go开发高并发API服务部署Python训练的模型:

// 使用Go调用Python训练的ONNX模型
import (
    "github.com/owulveryck/onnx-go"
    "gorgonia.org/tensor"
)

func predict(input []float32) ([]float32, error) {
    backend := onnx.NewTinyGraph()
    model := onnx.NewModel(backend)
    
    // 加载ONNX模型
    err := model.UnmarshalBinary(onnxModelData)
    if err != nil {
        return nil, err
    }
    
    // 准备输入张量
    inputTensor := tensor.New(
        tensor.WithShape(1, 784),
        tensor.WithBacking(input),
    )
    
    // 执行推理
    output, err := model.Run(map[string]interface{}{
        "input": inputTensor,
    })
    if err != nil {
        return nil, err
    }
    
    return output["output"].Data().([]float32), nil
}

在MLOps工具链中,Go也有广泛应用。Kubeflow的部分组件、Seldon Core的推理服务器都是用Go开发的。对于需要高性能数据预处理和模型服务的场景,Go是实用选择。

Go的机器学习生态可能不会直接挑战Python的主导地位,但在生产部署和系统集成层面提供了可靠解决方案。社区中也有golearneaopt等库持续维护,虽然规模较小但能满足特定需求。

回到顶部