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

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.rhkb.cn/news/120693.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea 无法识别maven的解决

问题描述 从git拉取代码或者修改文件夹以后,整个项目所有依赖爆红无法通过修改或者重新加载maven解决版本为idea 2021 问题定位 maven的版本太高,而idea的般本太低,导致识别的时候稳定性差 解决 使用idea原生的maven版本 选择已捆绑的m…

win10 ping不通 Docker ip(解决截图)

背景: win10下载了docker desktop就是这个图,然后计划做一个springboot连接docker。 docker部署springboot :docker 部署springboot(成功、截图)_總鑽風的博客-CSDN博客 问题:spring boot部署docker后,docker接口通了&#xff0…

Tomcat 日志乱码问题解决

我就是三井,一个永不放弃希望的男人。——《灌篮高手》 Tomcat 日志乱码问题解决 乱码原因:字符编码不一致 如:国内电脑一般都是GBK编码,而Tomcat日志使用的是UTF-8编码 解决方法:将对应字符编码由 UTF-8 改为 GBK 即…

【业务功能篇97】微服务-springcloud-springboot-电商购物车模块-获取当前登录用户的购物车信息

购物车功能 一、购物车模块 1.创建cart服务 我们需要先创建一个cart的微服务&#xff0c;然后添加相关的依赖&#xff0c;设置配置&#xff0c;放开注解。 <dependencies><dependency><groupId>com.msb.mall</groupId><artifactId>mall-commo…

串行协议——USB驱动[基础]

多年前的学习记录&#xff0c;整理整理。 一、USB协议基础 二、Linux内核USB驱动源码分析 USB中不同类型设备使用的 设备描述符(设备类\设备子类\设备协议) 配置不同,典型的以下几种:1)HID设备: Human Input Device人工输入设备, 如鼠标\键盘\游戏手柄等.2)CDC设备: Communi…

无涯教程-Flutter - 安装步骤

本章将指导您详细在本地计算机上安装Flutter。 在Windows中安装 在本节中&#xff0c;让无涯教程看看如何在Windows系统中安装 Flutter SDK 及其要求。 第1步 - 转到URL,https: //flutter.dev/docs/get-started/install/windows并下载最新的Flutter SDK。 第2步 - 将zip归档…

第二次作业

1.编写脚本for1.sh,使用for循环创建20账户&#xff0c;账户名前缀由用户从键盘输入&#xff0c;账户初始密码由用户输入&#xff0c;例如: test1、test2、test3、.....、 test10 编写脚本for1.sh 执行脚本&#xff1a;bash for.sh 2&#xff0c;编写脚本for2.sh,使用for循环,通…

Unity资源无法下载 反复提示需同意Terms of Service和EULA 同意后无效的解决方案

前言 最近在玩Unity&#xff0c;跟着tutorial做点项目&#xff0c;但是在下载免费资源时&#xff0c;只有从网站上点“打开Unity”&#xff0c;才能在本地Unity Editor的Package Manager里找到这个资源&#xff08;且点一下下面的刷新就没有了&#xff09;&#xff0c;并且点击…

【数据结构——树】二叉树的遍历(前序、中序、后序、层序)迭代+递归

文章目录 二叉树的定义二叉树的遍历方式前序遍历递归DFS迭代&#xff08;栈&#xff09; 中序遍历递归DFS迭代&#xff08;栈&#xff09; 后序遍历递归DFS迭代&#xff08;栈&#xff09; 层序遍历迭代&#xff08;队列&#xff09; 二叉树的定义 二叉树是一种常见的树状数据…

Java“牵手”京东商品评论数据接口方法,京东商品评论接口,京东商品评价接口,行业数据监测,京东API实现批量商品评论内容数据抓取示例

京东平台商品评论数据接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取京东商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、评论内容、评论日期、评论图片、追评内容等详细信息 。 获取商品评论接口API是一种用于获取…

【Hello Algorithm】二叉树相关算法

本篇博客介绍&#xff1a;介绍二叉树的相关算法 二叉树相关算法 二叉树结构遍历二叉树递归序二叉树的交集非递归方式实现二叉树遍历二叉树的层序遍历 二叉树难题二叉树的序列化和反序列化lc431求二叉树最宽的层二叉树的后继节点谷歌面试题 二叉树结构 如果对于二叉树的结构还有…

K8s 持久化存储有几种方式?一文了解本地盘/CSI 外接存储/K8s 原生存储的优缺点

当今云原生环境中&#xff0c;Kubernetes&#xff08;K8s&#xff09;已成为既定的容器编排工具。随着 K8s 的普及&#xff0c;存储也成为 K8s 用户关注的一个重要问题&#xff1a;为了满足不同的场景需求&#xff0c;K8s 可以支持基于不同架构的多种存储方案。这些方案间有什么…

Windows——安装 Microsoft 便签

打开 Microsoft Store。 搜索 Microsoft 便签&#xff0c;点击安装。

git co 命令是什么意思,用法是怎么样的

偶然看到同事使用 git co feat/xxx 来操作 git&#xff0c;以为 co 是什么 git 新命令&#xff0c;看起来很牛逼&#xff0c;所以问了下 chatgpt&#xff0c;chatgpt 的回答如下&#xff1a; git co 是 git checkout 的缩写形式&#xff0c;需要在Git的全局配置或别名配置中启用…

AJAX学习笔记3练习

AJAX学习笔记2发送Post请求_biubiubiu0706的博客-CSDN博客 1.验证用户名是否可用 需求,用户输入用户名,失去焦点-->onblur失去焦点事件,发送AJAX POST请求,验证用户名是否可用 新建表 前端页面 WEB-INF下新建lib包引入依赖,要用JDBC 后端代码 package com.web;import jav…

线性代数的学习和整理17:向量空间的基,自然基,基变换等(未完成)

目录 3 向量空间的基&#xff1a;矩阵的基础/轴 3.1 从颜色RGB说起 3.2 附属知识 3.3 什么样的向量可以做基&#xff1f; 3.4 基的分类 3.1.1 不同空间的基---向量组的数量可能不同 3.1.2 自然基 3.1.3 正交基 3.1.4 标准正交基 3.1.5 基和向量/矩阵 3.1.6 基变换 …

React笔记(八)Redux

一、安装和配置 React 官方并没有提供对应的状态机插件&#xff0c;因此&#xff0c;我们需要下载第三方的状态机插件 —— Redux。 1、下载Redux 在终端中定位到项目根目录&#xff0c;然后执行以下命令下载 Redux npm i redux 2、创建配置文件 在 React 中&#xff0c;…

【python】可视化

柱状图 matplotlib之pyplot模块之柱状图&#xff08;bar()&#xff1a;基础参数、外观参数&#xff09;_plt.bar_mighty13的博客-CSDN博客 bar()的基础参数如下&#xff1a; x&#xff1a;柱子在x轴上的坐标。浮点数或类数组结构。注意x可以为字符串数组&#xff01; height&…

计算机毕业设计 社区买菜系统 Vue+SpringBoot+MySQL

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师&#xff0c;全栈领域优质创作者。 项目内容…

【深度学习实验】NumPy的简单用法

目录 一、NumPy介绍 1. 官网 2. 官方教程 二、实验内容 1. 导入numpy库 2. 打印版本号 3. arange 函数 4. array函数 5. reshape函数 6. 矩阵点乘&#xff08;逐元素相乘&#xff09; 7. 矩阵乘法 一、NumPy介绍 NumPy是一个常用于科学计算的Python库&#xff0c;尤…