Go语言在机器学习中有未来吗?

news2024/11/20 2:46:16

Go 是一种开源编程语言,最初由 Google 设计,用于优化系统级服务的构建和使用、在大型代码库上轻松工作,以及利用多核联网机器。 Go 于 2009 年推出,作为一种静态类型和编译型编程语言,深受 C 语言的影响,注重简单性、安全性和并发性。

Go 最主要用于创建大规模应用程序,例如 Docker 和 Kubernetes。 此外由于低延迟、高效的跨平台性能和易扩缩性,Go 被 Netflix、PayPal 和 Uber 等公司广泛使用。 不过尽管 Go 有很多优点,但它在机器学习 (ML) 中并不常用。

本文将探索在 ML 中积极使用 Go 所要面对的挑战,以及 Go 可以在 ML 领域立足的途径。

PS:GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议,通过一步撤消快速安全重构,智能代码完成,死代码检测和文档提示帮助所有 Go 开发人员,从新手到经验丰富的专业人士,创建快速、高效、和可靠的代码。

GoLand正式版下载

将 Go 用于机器学习的主要挑战

Go 是一种强大高效的编程语言,速度快、性能高,能够满足 AI 解决方案的 CPU 密集型、高计算量计算需求。 它比 Python 更快,并具有易用、高效和并发等诸多优势,在某些情况下优于 ML 中使用的其他语言。

Go 有潜力创建稳健且可扩缩的 ML 应用,甚至性能也比某些竞品更为优越,但它在 ML 中仍然是一个被忽视的选择。 Go 在 ML 中的低采用率主要归因于它面临的一些重大挑战,而 ML 领域的旧编程语言已经解决了这些挑战。 Go 面临的挑战包括缺少高级库、没有 CUDA 的原生绑定,以及统计和呈现功能不够完善。

缺少高级库

作为一门相对较新的语言,相较于已经存在了数十年且拥有完善 ML 生态系统和库的其他语言,Go 的工具和库要少得多。 因此,Go 可用于 ML 任务的高质量库和工具更少。

这意味着,想为 ML 使用 Go 的开发者必须花费更多时间构建自定义解决方案,或者与并非专为 Go 设计的现有库和框架集成。

多年来,Go 库已经获得多项显著改进:GoLearn 提供了 scikit-learn 样式的拟合与预测功能,以及测试拆分和交叉验证效用函数,GoMind 提供了神经网络功能,类似于 TensorFlow 的计算图计算 ML 学习库 Gorgonia 提供了缩放功能。

但总体而言,这些库的深度仍逊于以 Python 为中心并且经过了数十年发展的库。并且在某些功能上,Go 也会体现出显著差距,例如自然语言处理 (NLP) 任务,特别是与 spaCy 和 NLTK 相比。

没有 CUDA 的原生绑定

统一计算设备架构 (CUDA) 是 NVIDIA 为图形处理单元 (GPU) 编程开发的并行计算平台和编程模型,它让开发者可以利用 NVIDIA GPU 的高性能计算能力加快各种应用,例如,ML、科学计算、图像和视频处理等。

以 GPU 的大规模并行性加快可并行化的计算是 CUDA 的主要优点,然而Go 不像 Python 那样具有与 CUDA 的原生绑定。

要在 Go 代码中使用 CUDA,首先需要导入并利用 C 函数来创建 CUDA 绑定。 公平地说,C 代码通过 cgo 命令嵌入 Go,从而可以创建调用 C 代码的 Go 软件包。 但是只有熟练掌握 C 语言才能依赖 C 代码和 cgo 进行高效的编码和调试,这会产生巨大的开销,同时也会产生特定于 C 语言的问题,例如内存安全情况和安全漏洞。

也有第三方代码软件包带有用于 CUDA 的 Go 绑定的效用函数,例如 cuda。

实验约束

从本质上讲,Go 并不特别适合实验。 Go 代码是一种编译型语言,会转化为可由 CPU 直接执行的机器码,替代在运行时由运行时环境解释。这项特性有助于提高 Go 的速度和效率,但是如果不先编译,就无法编写和执行 Go 代码。 因此相对于 Python 和 R 等解释型语言,在 Go 中相对难以尝试不同的想法和测试不同的问题解决办法。

Go 不像其他语言那样抽象自底层硬件,这对于需要低级优化或严格控制硬件资源的任务来说可能是一个优势,但也可能使 Go 代码更加冗长,需要更多的前期设置和配置,而 Python 在某些情况下相对而言更灵活、更易用。考虑到 scikit-learn 和 TensorFlow 等库和框架的深度,以及在一个软件包中为特征提取、聚类和降维等任务提供更简单解决方案的可用性,Go 并不是 ML 实验的最理想选择。

Go这样的编译型语言通常是高性能任务的更优选,例如服务器端编程和实时应用程序优化。

数学和统计功能不足

如前所述,Go 缺乏 Python 等业界重量级选手的深度,它只有少量专注于统计、微积分和矩阵操作的专属库和软件包,不足以满足 ML 和人工智能开发的需求。

这不一定对所有人来说都是劣势,有些开发者乐于为 ML 算法或数学逻辑主动编写代码。 不过这也表示 Go 在相同数据操作、分析和预测算法上的易用性仍要低于 Python。

总体而言,Python、R 和 Julia 推出最早,在 ML 社区中地位稳固。 Go 要想成为可行的替代方案,还有很长一段路要走,特别是这些现有编程语言也在持续发展,使其 ML 和 AI 功能更优秀、更简单、更有效。

Go 中的高级库

Go 中的 Gonum、Gorgonia 和 GoLearn 等高级库为构建和训练神经网络、执行数值计算和其他 ML 任务提供了工具。

然而它们的功能并不如 Python 库选项中的功能丰富,TensorFlow、scikit-learn 和 spaCy 等 Python 库和框架是为满足 ML 开发者的需求而创建和迭代开发,在 ML 行业中很受欢迎,它们提供了适合自然语言处理、图像嵌入向量、神经网络和其他 ML 要素需要的功能。

相同的功能在 Go 中也可以实现,并且得益于 Go 相比其他编程语言的优势(例如联网、并发和数据处理),它们可能会更强大、更高效。

不过,创建这些功能目前只能在 Go 社区中产生用处,因为 Go 在 ML 社区中并不像 Python 或 R 等语言那样流行。与更早的对应功能相比,其贡献者数量也存在巨大差距,导致库和工具的生态系统相对较小,使得寻找某些问题的既有解决方案更加困难。

情况是否正在发生变化?

Go 的人气越来越高,社区也在不断发展。 目前据 StackShare 统计,已有 2,751 家公司使用 Go,其中包括 Uber、Twitch、Shopify 和 Slack。 此外,根据 2021 Stack Overflow 开发者调查,大约 9.55% 的开发者使用 Go,是第 14 位最流行的编程语言。

虽然这对 Go 社区来说是个好消息,但它并没有真正转化到 ML 领域。 Go 最出名的能力在于创建可扩缩服务器和大型软件系统、编写并发程序以及启动快速轻量级微服务,就连 Go 官方网站也没有将 ML 列为其典型用例。

Go语言在机器学习中有未来吗?

这表明 Go 目前正在远离 ML 领域,也在 ML 社区中缺乏立足点。

未来用例

Go 在 ML 方面还没有值得注意的亮点,不过考虑到语言的优势,与其将 Go 视为开发 ML 模型的语言,不如将其看作为 ML 模型服务的语言。

Go 可用于构建 ML 模型服务器,允许模型被其他应用程序或系统访问和使用。 这对于在生产中部署 ML 模型或构建可供其他开发者或用户访问的 ML API 非常有用。 它可用于构建 ML 应用,例如由 ML 驱动的推荐引擎或自然语言处理工具。 它还可用于为这些类型的应用构建后端基础架构或面向用户的界面。

对于 Go 社区来说,创建更多工具包和框架来实现更快、更高效的服务器端 ML,可能会在 ML 领域为更多实验有效开放代码库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/971530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Prometheus + grafana 的监控平台部署

一、Prometheus安装 tar -zxvf prometheus-2.44.0.linux-amd64.tar.gz -C /opt/module/ sudo chown -R bigdata:bigdata /opt/module/prometheus-2.44.0.linux-amd64 mv /opt/module/prometheus-2.44.0.linux-amd64 /opt/module/prometheus-2.44.0 ln -s /opt/module/promethe…

【深入解析spring cloud gateway】02 网关路由断言

一、断言(Predicate)的意义 断言是路由配置的一部分,当断言条件满足,即执行Filter的逻辑,如下例所示 spring:cloud:gateway:routes:- id: add_request_header_routeuri: https://example.orgpredicates:- Path/red/{segment}filters:- AddR…

OCELOT: Overlapped Cell on Tissue Dataset for Histopathology

OCELOT dataset D { ( x s , y s c , x l , y l t , c x , c y ) i } i 1 N \mathcal{D} \left\{\left(\mathbf{x}_s, \mathbf{y}_s^c, \mathbf{x}_l, \mathbf{y}_l^t, c_x, c_y\right)_i\right\}_{i1}^{N} D{(xs​,ysc​,xl​,ylt​,cx​,cy​)i​}i1N​ x s ∈ R 1024 1…

修复中间件log4j漏洞方案(直接更换漏洞jar包)

说明: 后台服务里面的log4j漏洞我们已经全部升级处理了,但是一些中间件镜像包里的log4j漏洞需要单独处理 解决办法以ElasticSearch7.6.2为例: 方法: (1)找到容器里面有哪些旧的log4j依赖包 (…

023-从零搭建微服务-推送服务(三)

原【短信服务】更名【推送服务】 写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):https://gitee.com/csps/mingyue 源码地址(前端)&a…

Java后端开发面试题——企业场景篇

单点登录这块怎么实现的 单点登录的英文名叫做:Single Sign On(简称SSO),只需要登录一次,就可以访问所有信任的应用系统 JWT解决单点登录 用户访问其他系统,会在网关判断token是否有效 如果token无效则会返回401&am…

图神经网络和分子表征:4. PAINN

如果说 SchNet 带来了【3D】的火种,DimeNet 燃起了【几何】的火苗,那么 PAINN 则以星火燎原之势跨入 【等变】时代。 在 上一节 中,我们提到, PAINN 在看到 DimeNet 取得的成就之后,从另一个角度解决了三体几何问题&a…

css3对文字标签不同宽,不同高使用瀑布流对齐显示

<div class"wrapper" style"padding: 0;"><span class"wf-item task-tags text-center" v-for"(item,index) in data.categorys" :key"index">{{ item }}</span> </div>/* 名称瀑布流显示 */ .wrap…

基于PyTorch的交通标志目标检测系统

一、开发环境 Windows 10PyCharm 2021.3.2Python 3.7PyTorch 1.7.0 二、制作交通标志数据集&#xff0c;如下图 三、配置好数据集的地址&#xff0c;然后开始训练 python train.py --data traffic_data.yaml --cfg traffic_yolov5s.yaml --weights pretrained/yolov5s.pt --e…

嵌入式基础知识-DMA

本篇来介绍DMA的一些基础知识。 1 DMA简介 DMA&#xff08;Direct Memory Access&#xff09;,中文名为直接内存访问&#xff0c;它是一些计算机总线架构提供的功能&#xff0c;能使数据从附加设备&#xff08;如磁盘驱动器&#xff09;直接发送到计算机主板的内存上。对应嵌…

(笔记七)利用opencv进行形态学操作

&#xff08;1&#xff09;程序清单 形态学操作是一种图像处理技术&#xff0c;它基于数学形态学理论&#xff0c;用于改变图像的形状和结构。它主要通过结构元素的腐蚀和膨胀操作来实现。 #!/usr/bin/env python # -*- coding:utf-8 -*- """ author: LIFEI t…

2023-9-4 最大公约数

题目链接&#xff1a;最大公约数 #include <iostream>using namespace std;int gcd(int a, int b) {return b ? gcd(b, a % b) : a; }int main() {int n;cin >> n;while(n--){int a, b;cin >> a >> b;cout << gcd(a, b) << endl;}return …

uniapp 处理 分页请求

我的需求是手机上一个动态滚动列表&#xff0c;下拉到底部时&#xff0c;触发分页数据请求 uniapp上处理分页解决方案 主要看你是如何写出滚动条的。我想到的目前有三种 &#xff08;1&#xff09;页面滚动&#xff1a;直接使用onReachBottom方法&#xff0c;可以监听到达底部…

【python爬虫】16.爬虫知识点总结复习

文章目录 前言爬虫总复习工具解析与提取&#xff08;一&#xff09;解析与提取&#xff08;二&#xff09;更厉害的请求存储更多的爬虫更强大的爬虫——框架给爬虫加上翅膀 爬虫进阶路线指引解析与提取 存储数据分析与可视化更多的爬虫更强大的爬虫——框架项目训练 反爬虫应对…

8K视频来了,8K 视频编辑的最低系统要求

当今 RED、Canon、Ikegami、Sony 等公司的 8K 摄像机以及 8K 电视&#xff0c;许多视频内容制作人和电影制作人正在认真考虑 8K 拍摄、编辑和后期处理&#xff0c;需要什么样的系统来处理如此海量的数据&#xff1f; 中央处理器&#xff08;CPU&#xff09; 首先&#xff0c;…

Redis 集群环境案例安装步骤

1. 3主3从redis集群配置 1.1 找3台真实虚拟机&#xff0c;各自新建 mkdir -p /myredis/cluster 1.2 新建6个独立的redis实例服务 1.2.1 本次案例设计说明(ip有变化) https://processon.com/diagraming/5fe6d76ce401fd549c8fe708 1.2.2 IP: 192.168.111.175端门6381/端口6…

基于Matlab实现多个图像压缩案例(附上源码+数据集)

图像压缩是一种将图像数据量减少的技术&#xff0c;以减少存储空间和传输带宽的需求。在本文中&#xff0c;我们将介绍如何使用Matlab实现图像压缩。 文章目录 简单案例源码数据集下载 简单案例 首先&#xff0c;我们需要了解图像压缩的两种主要方法&#xff1a;有损压缩和无…

深入理解联邦学习——联邦学习的分类:基础知识

分类目录&#xff1a;《深入理解联邦学习》总目录 在实际中&#xff0c;孤岛数据具有不同分布特点&#xff0c;根据这些特点&#xff0c;我们可以提出相对应的联邦学习方案。下面&#xff0c;我们将以孤岛数据的分布特点为依据对联邦学习进行分类。 考虑有多个数据拥有方&…

[国产MCU]-W801开发实例-MQTT客户端通信

MQTT客户端通信 文章目录 MQTT客户端通信1、MQTT介绍2、W801的MQTT客户端相关API介绍3、代码实现本文将详细介绍如何在W801中使用MQTT协议通信。 1、MQTT介绍 MQTT 被称为消息队列遥测传输协议。它是一种轻量级消息传递协议,可通过简单的通信机制帮助资源受限的网络客户端。 …

thinkphp6 入门(5)-- 模型是什么 怎么用

一、模型 MVC架构 之前开发一个功能&#xff0c;后端为在控制器&#xff08;C&#xff09;中写 php SQL&#xff0c;前端为在页面&#xff08;V&#xff09;中写html css js&#xff0c;这就形成了 VC 架构。 但是发现&#xff0c;相同的数据逻辑&#xff08;SQL&#xf…