深度学习的下一个大热门——Swift

来源商业新知网,原标题:为什么Swift会是深度学习的下一个大热门?

 

如果你喜欢编程,当你听到Swift,你可能会想到iOS或MacOS的应用程序开发。如果你正在进行深度学习,那么你一定听说过Swift for Tensorflow(缩写为S4TF)。然后,你可以问自己:“为什么谷歌要为Swift创建一个TensorFlow版本?”Python和c++已经有了版本;为什么要添加另一种语言?在这篇文章中,我将试着回答这个问题,并概述为什么你应该认真遵循S4TF以及Swift语言本身的原因。这篇文章的目的不是给出非常详细的解释,而是提供一个总体概述和大量的链接,这样,如果您感兴趣,就可以进行更深入的研究。

Swift背后有强大的支持

Swift是Chris Lattner在苹果工作时创造的。现在,Chris Lattner就职于谷歌Brain,世界上最好的人工Max Pechyonkin之一,5月27日·5分钟阅读智能研究团队。事实上,Swift语言的创造者现在在实验室从事深度学习的研究来告诉你,这是一个严肃的项目。

不久前,谷歌的人意识到,尽管Python是一种优秀的语言,但是它有许多难以克服的限制。TensorFlow需要一种新的语言,经过长时间的考虑,Swift被选为候选人。我不会在这里详细介绍,但是有一个文档描述了Python的缺点,以及考虑了哪些其他语言,以及最终如何将其缩小到Swift。

不仅仅是一个库

Swift对于TensorFlow不仅仅是另一种语言的TF。它本质上是Swift语言本身的另一个分支(在git的意义上)。这意味着S4TF不是一个库;它本身是一种语言,内置了支持TensorFlow所需的所有功能的特性。例如,S4TF中有一个非常强大的自动微分系统,这是计算梯度所需要的深度学习的基础之一。对比一下Python,在Python中,自动区分不是语言的核心组件。最初作为S4TF的一部分开发的一些功能后来被集成到Swift语言本身。

Swift很快

当我第一次知道Swift的运行速度和C代码一样快时,我很惊讶。我知道C是高度优化的,可以达到非常高的速度,但这是以微管理内存为代价的,这导致C的内存不安全)。此外,C语言不是一门很容易学的语言。

现在,Swift在数值计算中运行得和C一样快,而且它没有内存安全问题,而且它更容易学习。Swift背后的LLVM编译器非常强大,并且有非常高效的优化,这将确保您的代码运行得非常快。

在SWIFT中可以使用多种代码

因为机器学习的Swift还处于非常早期的阶段,这意味着适合Swift的机器学习库并不多。不必担心,因为Swift具有惊人的Python互操作性。只需导入Swift中的任何Python库,它就能正常工作。

类似地,您可以将C和c++库导入到Swift中(对于c++,您需要确保头文件是用纯C编写的,而没有c++特性)。总之,如果您需要特定的功能,但它还没有在Swift中实现,您可以导入相应的Python、C或c++包。令人印象深刻的!

SWIFT可以降到很低的水平

如果您曾经使用过TensorFlow,那么很可能是通过Python包完成的。在底层,Python版本的TensorFlow库底层有C代码。所以当你调用TensorFlow中的任何函数时,在某种程度上你会碰到一些C代码。这意味着检查源代码的速度是有限制的。例如,如果您想了解卷积是如何实现的,您将无法看到Python代码,因为它是在C语言中实现的。

在Swift中,情况就不同了。Chris Lattner称Swift是“LLVM(汇编语言)的语法糖”。这意味着从本质上说,Swift非常接近硬件,而且在硬件之间没有其他用C编写的代码层。这也意味着Swift代码非常快,如上所述。这一切都使您作为开发人员能够从一个非常高的级别检查代码到一个非常低的级别,而不需要进入C语言。

接下来是什么

Swift只是谷歌深度学习创新的一部分。还有一个非常密切相关的组件:MLIR,它代表多级中间表示。MLIR将是谷歌统一的编译器基础设施,允许用Swift(或任何其他受支持的语言)编写代码,并将其编译到任何受支持的硬件。目前,针对不同的目标硬件有大量的编译器,但是MLIR将改变这一点,不仅允许代码重用,还允许编写定制的编译器底层组件。它还将允许研究人员应用机器学习来优化底层算法:

虽然MLIR充当ML的编译器,但是我们也看到它支持在编译器中使用机器学习技术!这一点尤其重要,因为开发数字库的工程师的扩展速度赶不上ML模型或硬件的多样化。

想象一下能够使用深度学习来帮助优化数据的底层内存平铺算法(类似于Halide试图完成的任务)。而且,这仅仅是机器学习在编译器中的开始和其他创造性应用!

总结

如果你喜欢深度学习,那么Swift是一门你应该开始学习的语言。与Python相比,它具有许多优势。谷歌正在大力投资,使Swift成为其TensorFlow ML基础设施的一个关键组件,而且很有可能Swift将成为深度学习的语言。所以,早点开始学习Swift也会是你一个先发制人的优势。

转载于:https://www.cnblogs.com/xinzhihao/p/10968587.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值