PyTorch是一个年轻的框架。2017年1月28日,PyTorch 0.1版本正式发布,这是Facebook公司在机器学习和科学计算工具Torch的基础上,针对Python语言发布的全新的深度学习工具包。PyTorch类似NumPy,并且支持GPU,有着更高级而又易用的功能,可以用来快捷地构建和训练深度神经网络。一经发布,PyTorch便受到深度学习和开发者们广泛关注和讨论。经过一年多的发展,目前PyTorch已经成为机器学习和深度学习者重要的研究和开发工具之一。
2017年7月,Facebook和微软宣布,推出开放的Open Neural Network Exchange(ONNX,开放神经网络交换) 格式,ONNX为深度学习模型提供了一种开源格式,模型可以在不同深度学习框架下进行转换。亚马逊的AWS接着加入进来,2017年10月,INTEL、NVIDIA、AMD、IBM、Qualcomm、ARM、联发科和华为等厂商纷纷加入ONNX阵营,ONNX生态圈正式形成。ONNX生态系统除了原本支持的开源软件框架Caffe2、PyTorch和CNTK也包含MXNet和TesorFlow。PyTorch是一套以研究为核心的框架,但是用PyTorch开发的算法模型可以通过ONNX转换,可用于其他主流深度学习框架。
2017年8月,PyTorch 0.2版本发布,增加分布式训练、高阶导数、自动广播法则等众多新特性。
2017年12月,PyTorch 0.3版本发布,性能改善,对计算速度进行优化,同时一个重大的更新是模型转换,支持DLPack、支持ONNX格式,可以把PyTorch模型转换到Caffe2、CoreML、CNTK、MXNet、TensorFlow中。
2018年4月25日,PyTorch官方在github上发布了0.4.0版本,新版本做了非常多的改进,其中最重要的改进是官方支持Windows系统。
2018年10月3日,首届PyTorch开发者大会上,FaceBook正式发布PyTorch 1.0预览版。PyTorch 1.0框架主要迎来了三大更新:第一,添加了一个新的混合前端,支持从Eager模式到图形模式的跟踪和脚本模型,以弥合研究和生产部署之间的差距;第二,增加了经过改进的torch.distributed库,使得开发者可以在Python和C++环境中实现更快的训练;第三,增加了针对关键性能研究的Eager模式C++接口。在PyTorch 1.0版本中,Facebook将现有PyTorch框架的灵活性与Caffe2(2018年5月宣布Caffe2并入PyTorch) 的生产能力结合,提供从研究到AI研究产品化的无缝对接。
可以看到PyTorch更新频率是很快的,可见FaceBook对其支持力度。开源社区和机器学习从业者也对PyTorch响应热烈。面对众多的深度学习框架, 为什么要选择PyTorch?PyTorch有哪些鲜明的特点呢?
- PyTorch使用Python作为开发语言,使得开发者能接入广大的Python生态圈的库和软件。同时,在PyTorch开发中,数据处理类型类似数据计算包Numpy的矩阵类型,代码风格类型机器学习包scikit-learn,方便广大的机器学习者进入深度学习这个新的领域。
- 目前大多数开源框架(比如TensorFlow、Caffe2、CNTK、Theano等)采用静态计算图, 而PyTorch采用动态计算图。静态计算图要求对网络模型先定义再运行,一次定义多次运行。动态计算图可以在运行过程中定义,运行的时候构建,可以多次构建多次运行。静态图的实现代码冗长,不直观。动态图的实现简洁优雅,直观明了。动态计算图的另一个显著优点是调试方便,可随时查看变量的值。由于模型可能会比较复杂,如果能直观地看到变量的值,就能够快速构建好模型。
- PyTorch的API设计简洁优雅,方便易用。PyTorch的API设计思想来源于Torch,Torch的API设计以灵活易用而闻名,Keras作者就是受Torch的启发而开发了Keras。PyTorch有种使用Keras的快感,就是来源于此。相比而言,TensorFlow就臃肿难用多了。
- PyTorch支持ONNX格式,补齐了最后一块短板——生产环境的部署。生产环境包括有移动设备、嵌入式设备和云端设备。原本因PyTorch过于灵活,不太合适部署生产环境和大规模部署,但将深度学习应用部署到生产环境变得越来越重要,ONNX的横空出世解决了这一难题。可以用PyTorch做研究,然后用ONNX转换为Caffe2部署到生产环境。值得一提的是,Caffe2也是Facebook开发的,是Caffe的最新版本。
PyTorch开发语言简洁优雅,方便快速构建模型,同时调试的功能便于发现和改进错误。可以说,PyTorch是入手深度学习的最佳利器。