对于高性能服务器端的部署,还有TensorFlow Serving能用。除了性能之外,开奖,TensorFlow Serving一个显著的优点是可以轻松的热插拔模型,而不会使服务失效。 文档 赢家:平手 对于两个框架,我都在文档中找到所需的一切。Python API被很好的记录,以及有足够的案例和教程来学习框架。 一个特例是,PyTorch的C库大多数没有文档。不过,这只有在你编写一个定制化的C扩展时才有影响。 数据加载 赢家:PyTorch PyTorch中用于加载数据的API设计的很棒。接口由一个数据集、一个取样器和一个数据加载器构成。数据加载器根据取样器的计划,基于数据集产生一个迭代器。并行化数据加载简单的就像把num_workers参数传递给数据加载器一样简单。 我在TensorFlow中没有发现特别有用的数据加载工具。很多时候,并不总能直接把准备并行运行的预处理代码加入TensorFlow图。以及API本身冗长难学。 设备管理 赢家:TensorFlow TensorFlow的设备管理非常好用。通常你不需要进行调整,因为默认的设置就很好。例如,TensorFlow会假设你想运行在GPU上(如果有的话)。而在PyTorch中,即使启用了CUDA,你也需要明确把一切移入设备。 TensorFlow设备管理唯一的缺点是,默认情况下,它会占用所有的GPU显存。简单的解决办法是指定CUDA_VISIBLE_DEVICES。有时候大家会忘了这一点,所以GPU在空闲的时候,也会显得很忙。 在PyTorch中,我发现代码需要更频繁的检查CUDA是否可用,以及更明确的设备管理。在编写能够同时在CPU和GPU上运行的代码时尤其如此。以及得把GPU上的PyTorch变量转换为Numpy数组,这就显得有点冗长。 numpy_var = variable.cpu().data.numpy() 自定义扩展 赢家:PyTorch 两个框架都可以构建和绑定用C、C++、CUDA编写的自定义扩展。TensorFlow仍然需要更多的样板代码,尽管这对于支持多类型和设备可能更好。在PyTorch中,你只需为每个CPU和GPU编写一个接口和相应的实现。两个框架中编译扩展也是直接记性,并不需要在pip安装的内容之外下载任何头文件或者源代码。 关于TensorBoard TensorBoard是TensorFlow自带的可视化工具,用来查看机器学习训练过程中数据的变化。通过训练脚本中的几个代码段,你可以查看任何模型的训练曲线和验证结果。TensorBoard作为web服务运行,特别便于对于无头结点上存储的结果进行可视化。 如果没有类似的功能,我可不想用PyTorch。不过还好,借助两个开源项目可以实现。第一个是tensorboard_logger,第二个是crayon。tensorboard_logger库用起来甚至比TensorBoard的“摘要”更容易,尽管想用这个首先得安装TensorBoard。 crayon可以完全替代TensorBoard,但是需要更多的设置(docker是先决条件)。 关于Keras Keras是具有可配置后端的高级API。目前TensorFlow、Theano、CNTK都支持。也许不久的将来,PyTorch也会提供支持。作为tf.contrib的一部分,Keras也随TensorFlow一起分发。 虽然上面我没有讨论过Keras,但其API特别容易使用,这也是配合常见深度神经网络架构最快的方式。不过,直播,使用API毕竟没有使用PyTorch或者核心TensorFlow那么灵活。 Keras是许多常用的深层神经网络架构中运行最快的方法之一。 关于TensorFlow Fold 今年2月,谷歌推出了TensorFlow Fold。这个库建立在TensorFlow智商,允许构建更多的动态图。这个库的主要优势是动态批处理。动态批处理可以自动对不同大小的输入进行批量计算(例如解析树上的循环网络)。 可编程性方面,语法不像PyTorch那么简单,当然在某些情况下,批处理带来的性能提升还是值得考虑。 好了,以上就是来自Awni Hannun的分享。希望对大家有所帮助,另外兼听则明,量子位继续搬运几条reddit上读者的评论。 读者Reiinakano: 我不觉得“文档”环节双方平分秋色。 官方的TensorFlow文档很差劲。比方,在PyTorch文档中,对于迁移学习的讲解,使用了实际、有用的代码,而且还解释了构建的方式。而在TensorFlow的文旦中,整个讲解就是运行了一个bash s,没有任何实际代码。 读者ThaHypnotoad: PyTorch还有很长的路要走。前几天我发现int tensor没有neg()定义。不过,我更讨厌调试静态图。所以我选择忍受PyTorch成长的烦恼。 读者trias10: (责任编辑:本港台直播) |