点击上方“中生代技术”,选择“置顶公众号”

中生代技术,关注技术人的成长

@开发者,如果你正在研究深度学习,那么建议你开始学习Swift语言。

作者 | Max Pechyonkin

译者 | 弯月,责编 | 郭芮

出品 | CSDN(ID:CSDNnews)

以下为译文:

当程序员听到Swift时,可能都会联想到iOS或MacOS的应用开发。如果你正在研究深度学习,那么你一定听说过Swift版的TensorFlow。你可能不禁想问:“为什么Google会创建Swift版的TensorFlow?现在已经有Python和C++版本了,为什么还要添加另一种语言?”

我将在这篇文章中为你解答这个问题,并概述为什么你需要留意Swift版的TensorFlow以及Swift语言本身。我不打算在文本中提供详细的解释,但是我会提供大量链接,如果你对这个话题感兴趣的话,那么可以深入挖掘。

Swift拥有强力的后援

Swift是由Chris Lattner在苹果工作时创建的。目前,Chris Lattner在Google Brain工作——这是世界上最先进的人工智能研究团队之一。 Swift语言的创始人如今在研究深度学习的实验室工作,这个事实说明这是一个重大的项目。

前段时间,Google意识到尽管Python是一种优秀的语言,但它仍有许多难以克服的局限性。TensorFlow需要一种新语言,经过长时间的考虑后,这个重任落到了Swift肩上。我不打算对此做详细的介绍,但是你可以自行阅读这篇文档(https://github.com/tensorflow/swift/blob/master/docs/WhySwiftForTensorFlow.md),文中描述了Python的缺点,有关其他语言的考量,以及最终选中了Swift的经过。

Swift版的TensorFlow不仅仅是一个代码库

Swift版的TensorFlow不仅仅是另一种语言的TensorFlow。

从本质上来说,它是Swift语言的另一个分支(就像在git上创建branch一样)。这意味着Swift版的TensorFlow并不是一个代码库, 它本身就是一种语言,它内置的功能支持TensorFlow所需的所有功能。

例如,Swift版的TensorFlow拥有非常强大的自动微分系统,这是深度学习计算梯度所需的基础。相比之下,Python的自动微分系统不是语言的核心组成部分。有一些最初为Swift版的TensorFlow开发的功能后来被集成到了Swift语言本身中。

Swift非常快

当第一次得知Swift的运行速度与C代码一样快时,我感到非常惊讶。我知道C经过了高度优化,且可以实现非常高的速度,但这需要以微内存管理为代价,因此C不能保证内存的安全。此外,C不是一种非常容易学习的语言。

如今,Swift的数值计算速度与C一样快,还没有内存安全的问题,而且更容易学习。Swift背后的LLVM编译器功能非常强大,并且拥有非常高效的优化功能,可以确保代码快速地运行。

你可以在Swift中使用Python、C和C++代码

由于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非常靠近硬件,Swift与硬件之间没有其他用C写的附加层。这也意味着Swift代码非常快,如上所述。

因此,开发人员能够检查所有的代码,无论是高层的代码还是非常底层的代码,都无需深入C。

将来的发展

Swift只是Google深度学习创新的一部分。还有另一个非常密切相关的组件:MLIR(Multi-Level Intermediate Representation,多层中间表示)。MLIR将会成为Google统一的编译基础设施,它允许你用Swift(或任何其他支持的语言)编写代码,并编译成任何支持的硬件。

目前,有许多针对不同目标硬件的编译器,但MLIR将改变这种局面,它不仅可以支持代码的可重用性,而且还允许你编写编译器自定义的底层组件。同时,它还允许研究人员应用机器学习来优化低级算法:

虽然MLIR是机器学习的编译器,但我们也看到它可以将机器学习的技术应用到编译器本身!这一点非常重要,因为工程师开发数值计算库的速度跟不上机器学习模型或硬件多元化的速度。

想象一下,我们能够使用深度学习来优化处理数据的底层内存切片算法(类似于Halide正在努力完成的任务)。而且,这只是一个开端,还有其他机器学习的创造性应用也可以在编译器中使用!

总结

如果你正在研究深度学习,那么我建议你开始学习Swift语言。与Python相比,Swift拥有多方面的优势。Google正在大力投资,让Swift成为TensorFlow多层基础设施的关键组成部分,而且Swift很可能成为深度学习的语言。 因此,先下手为强,尽早开始学习Swift吧。

链接:https://towardsdatascience.com/why-swift-may-be-the-next-big-thing-in-deep-learning-f3f6a638ca72

本文为 CSDN 翻译,转载请注明来源出处。

【END】

研发管理好文回顾

☞ 专访《突破》作者刘朋: 程序员快速提升领导力的15个模式!

☞ 刘朋 | 招招“至”胜 “六步工作法”打造致胜团队

☞ 大卫张33|研发管理在互联网时代|文末有视频

☞ 老曹眼中的研发管理二三事

☞ 《突破-程序员如何练就领导力》引用参考文献归纳与推荐

☞ 远离低效加班! 高效领导者提升思考力的5个底层法则

☞ 不是所有的程序员都适合转管理,但是领导力可以有套路练就

☞ 4个误区:由「技术岗」转「管理岗」小心避开

☞ 突破技术管理,IT人中年危机变契机

        

#专注技术人的成长#

点击阅读原文,阅读英文原版

你点的每个“在看”,我都认真当成了喜欢

为什么Swift可能是深度学习的下一代重要的工具相关推荐

  1. 99数据集预处理_深度学习在放射治疗的应用—工具篇(五)数据集构建

    家园宗旨:诚邀八方志同道合之友,共谋一隅传道受业之善! 作者简介: 本期我们将继续介绍Matlab中的数据集系列函数.上期中我们介绍了imageDatastore数据集函数,该函数能够实现深度学习所需 ...

  2. 什么是CUDA和CUDNN?——GeForce NVIDIA显卡用于深度学习计算的GPU加速工具

    1.什么是CUDA? CUDA的概念 统一计算架构CUDA(Compute Unified Device Architecture)是为了让nvidia gpu可以完成通用计算任务的一种集成技术 ,通 ...

  3. 【Tools】神经网络、深度学习和机器学习模型可视化工具——Netron

    背景 有时候我们写完深度学习模型后,想看看代码实现的模型和我们预期是否一致,但是没有一个好的工具.最近发现有一个软件Netron支持对一部分深度学习模型可视化,源码地址.Netron 支持 ONNX. ...

  4. Python深度学习入门之plt画图工具基础使用(注释详细,超级简单)

    Python自带的plt是深度学习最常用的库之一,在发表文章时必然得有图作为支撑,plt为深度学习必备技能之一.作为深度学习入门,只需要掌握一些基础画图操作即可,其他等要用到的时候看看函数API就行. ...

  5. 基于深度学习算法的NLP集成工具

    向AI转型的程序员都关注了这个号

  6. 深度学习平台——常用图像标注工具

    摘要 Labelme Labelme适用于图像分割任务的数据集制作: labelImg Labelme适用于图像检测任务的数据集制作: 该工具的下载连接为labelimg (2).zip_免费高速下载 ...

  7. 【模型结构绘制】深度学习神经网络模型结构图绘制工具及方法总结【写论文必备】

    本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工具. 这个工具可以非常方便的画出各种类型的图,是下面这位小哥哥开发的,来自于麻省理工学院弗兰克尔生物工程实验室, 该实验室开发可视化和 ...

  8. 深度学习康耐视ViDi如何添加工具

    在建立好一个Workspace后,会出现一个 图标 点击该图标的加号,即可显示可用的工具. 点击需要添加的工具,即可完成工具的添加

  9. 从建模型到写论文,哈佛AI研究经验大公开;必学!MIT的CS数学基础课;医疗AI平台;深度学习发现小分子药物工具库;前沿论文 | ShowMeAI资讯日报

最新文章

  1. win2000堆的调试
  2. php设置key,phpstorm8 设置及license key
  3. JavaScript -- Window-Interval
  4. sqoop将关系型数据库的表导入hive中
  5. android studio 以源码形式导入volley作为library,SDK的目录结构
  6. 三维重建:Kinect几何映射-SDK景深数据处理
  7. python数据科学-单变量数据分析
  8. 荐号 | 11个人工智能与大数据相关的个人、企业优质号
  9. leetcode109. 有序链表转换二叉搜索树(递归)
  10. mysql的json函数与实例_Mysql实例详解Mysql中的JSON系列操作函数
  11. 睡眠周期时长测试软件,“智能时钟”测睡眠周期 最佳时候叫醒你
  12. python提取字符串中数字_EXCEL数字在字符串中间怎么提取?
  13. java shiro jwt_Springboot实现Shiro整合JWT的示例代码
  14. 关于私钥加密、公钥加密、签名在生活中的场景
  15. 设计模式笔记(10)---装饰模式(结构型)
  16. dpdk X710 VF reset
  17. 2k21sports服务器暂时不可用,NBA2K20服务器不可用怎么解决 nba2k20进不去游戏解决办法...
  18. AGV-倍福beckhoff TWINCAT2及台达电机、传感器等使用总结
  19. https://wenku.baidu.com/view/35c88b375acfa1c7aa00ccca.html--swot
  20. 发字的楷书写法图片_优秀的楷体书写作品高清图片

热门文章

  1. 数据结构之栈的应用:表达式求值
  2. 计算机网络之数据链路层:12、CSMA/CA协议-随机访问介质访问控制
  3. 【README】二叉树刷题框架
  4. Ubuntu关于apt-get remove与apt-get purge
  5. Java 网络实例一(获取指定主机的IP地址、查看端口是否已使用、获取本机ip地址及主机名、获取远程文件大小)
  6. python raise
  7. Dev TextEdit 输入提示
  8. 集群、RAC和MAA
  9. React入门教程第三课--gulp编译优化
  10. IM系统中如何保证消息的可靠投递(即QoS机制)(转)