实际上,每个人都在使用C ++进行机器学习。每个现代的机器学习框架都首先使用C ++编写,随后添加脚本语言绑定(通常是Python)。 大多数框架都是使用某种用于描述网络拓扑的DSL(特定于域的语言)在C ++中实现的。 除此之外,还有一些例外,例如TensorFlow,它不使用DSL,而是使用Python来连接神经网络节点。DLib使用C ++模板描述网络; 和Torch,它使用Lua进行网络描述。 Caffe使用Protobuf作为其网络描述语言,但也具有Python绑定,而CNTK使用其自己的DSL并具有.NET和Python绑定。 大多数机器学习框架都具有神经网络描述DSL或脚本语言绑定的原因是,数学家无需学习C ++的细节即可完成工作。 由于大多数工作是由网络层完成的,因此使用哪种语言描述层之间的连接以及层的参数并不重要。 这意味着数学家以专注于算法,而无需花费时间和精力来编写高性能的C ++和CUDA代码。 我要说的是,该领域大致分为科学家和工程师。 科学家们通过发现最佳的网络拓扑和参数来提高技术水平,但是对于编写高性能处理管道和与GPU的接口可能知之甚少。 另一方面,工程师们只了解神经网络背后的数学知识,但他们对软件体系结构和高性能计算了解很多。 在这两个学科上都很出色的人很少,因为其中任何一个都需要终身奉献。 总之,这是工程师编写C ++代码和科学家创建能够产生最佳结果的网络拓扑的协作。 大多数框架具有脚本编写(通常是Python)前端的原因是为了降低科学家从事其工作的入门门槛。 综上所述,每个人毫无例外地都使用C ++进行机器学习,但是许多人选择使用Python之类的语言提供的更高级别的抽象来专注于他们选择的专业。