学习资料:
Facebook 的深度学习框架 PyTorch 是今年最受欢迎的库之一。
PyTorch 源于 Torch 框架,同时改善了 Torch 框架,而且 PyTorch 基于 Python 语言。过去的几年,人们一直用 Python 做数据科学的研究,PyTorch 的出现加快了深度学习的普及。
最值得注意的是,由于实现了动态计算图范式, PyTorch 已经成为众多研究人员的首选框架之一。当使用 TensorFlow、CNTK 或者 MXNet 等框架编写代码时,你必须首先定义一个称为计算图的东西。计算图制定了代码将要运行的所有操作,然后代码会被被编译并利用框架优化,以便在 GPU 上更快地并行运行。这个范式被称为静态计算图,它很棒,因为你可以利用各种优化,并且图形一旦构建完成就能运行在不同的设备上。然而,在诸如自然语言处理等任务中,「工作量」往往是可变的:将图像喂给算法之前,你可以把图像调整到固定的分辨率,但相同的操作不能适用于语句,因为句子的长度是变化的。这正是 PyTorch 和动态图的优势所在,让开发者在代码中使用标准的 Python 控制指令,图形在执行时被定义,给予开发者很大的自由,这对于多任务来讲是必不可少的。
当然,PyTorch 可以计算梯度(就像其他深度学习模型一样),而且非常快,可扩展性强,所以值得一试。
虽然听起来很不可思议,但今年 Facebook 发布了另一个伟大的深度学习框架 —— Caffe2。
原始的 Caffe 框架广泛使用了多年, 它凭借无与伦比的性能和经过测试的代码库而闻名。然而,近期深度学习的发展趋势让该框架在某些方面停滞不前。Caffe2 则是让 Caffe 跟上潮流的一次尝试。
Caffe2 支持分布式训练、部署(即使是在移动平台上),最新的 CPU 和支持 CUDA 的硬件。PyTorch 可能更适合做研究,而 Caffe2 更加适合大规模部署,就像在 Facebook 上看到的那样。
另外,你可以在 PyTorch 里构建并训练模型,同时用 Caffe2 部署!这不是很棒吗?
Pendulum 的优势之一在于,它是 Python 标准 datetime 替代品,因此你可以轻松地将其与现有的代码集成,并且在你需要的时候才使用它的功能。Pendulum 的作者特别注意时间分区的处理,默认在每个实例中时间分区是可用的,并且以 UTC 计时。你也可以获得扩展 timedelta 来简化 datetime 的计算。
与其他库不同的是,Pendulum 努力让 API 具有可预测的行为,所以你该知道期望什么,如果你正在做与 datetime 相关的工作,那么 Pendulum 能让你工作得更加开心。详细信息请查看文档:https://pendulum.eustace.io/docs/
如果你做与数据科学相关的工作,会使用到诸如 Pandas 和 scikit-learn 等 Python 生态系统中的工具,用 Jupyter Notebooks 管理工作流程。但是,你如何向那些不知道怎样使用这些工具的人分享你的工作呢?你该怎样构建一个交互界面,使人们可以轻松地处理数据,并让整个过程可视化?过去,你需要一个专业的 JavaScript 前端团队来构建这些 GUI。而现在,你不再需要了。
Dash 是一个可构建 Web 应用,尤其是数据可视化 Web 应用的纯 Python 开源库。它建立在 Flask、Plotly 和 React 之上,并提供这几个框架的函数抽象接口,从而开发者不必学习这些框架,高效开发。这些应用程序可在浏览器和移动设备中使用。
如果你想了解更多 Dash 的信息,请查阅:
Python 中有许多库可用于做数据科学和机器学习,但当你的数据点是随着时间变化而变化时(例如股票数据),这就不一样了。
PyFlux 是专门针对时间序列开发的 Python 开源库。时间序列研究是统计学和经济学的子领域,其目的是用于描述时间序列的行为(in terms of latent components or features of interest),同时也预测时序未来的行为状态。
PyFlux 允许使用概率的方法对时间序列建模,并且实现了几个时间序列模型,如 GARCH。
在通常情况下,你需要为你的项目制作命令行界面。除了传统的 argparse,Python 还有一些很棒的工具,比如 Click 或者 docopt。谷歌今年宣布的 Fire 则采用了不同的方法来解决这个问题。
Fire 是一个开源库,可以为任何 Python 项目自动生成一个命令行界面。你几乎不需要编写任何代码或者文档,你只需要调用一个 Fire 方法并把它传递给你想要的命令行界面:一个函数、一个对象、一个类、一个库,甚至不传递任何参数(这会使你的整个代码进入命令行界面)。
请阅读指南来了解它的工作原理:https://github.com/google/python-fire/blob/master/docs/guide.md。
在理想情况下,我们有完美平衡的数据集,然后非常顺利地训练模型。不幸的是,现实不是这样的,某些任务的数据集非常不平衡。例如,预测信用卡中的交易行为时,绝大多数(+99.9%)的交易是合法的。如果按照这样的方式训练算法,会得到很糟糕的结果,所以在使用这些类型的数据集时要非常小心。
幸运的是,这个问题已经被充分地研究,也存在着各种各样的技术来解决该问题。imbalanced-learn 是一个 Python 库,它提供了相关的技术来解决数据不平衡的问题。另外,它和 scikit-learn 兼容,并且是 scikit-learn-contrib 项目的一部分,非常有用。
在数据清理工作中,你需要搜索文档并替换特定的内容,这通常用正则表达式完成。但有时候会出现这样的情况:你需要搜索成千上万的数据,然后采用正则表达式的方式会变得非常缓慢。
FlashText 是个更好的选择。作者在最初的基准测试中,FlashText 使整个操作的运行时间大大缩短:从 5 天降到 15 分钟。FlashText 的优点在于无论搜索条件有多少,运行时间都是一样的,而随着搜索条件的增加,正则表达式的运行时间几乎呈线性增长。
FlashText 证明了算法和数据结构设计的重要性,即使对于简单的问题,更好的算法也能够轻松超越在最快 CPU 上运行的朴素实现。
图像无处不在,理解其内容对于很多应用程序来说非常重要。庆幸的是,由于深度学习的进步,图像处理技术有了很大的进步。
Luminoth 是一个用 TensorFlow 和 Sonnet 构建的开源的计算机视觉 Python 工具包。它可直接支持物体检测,背后支持的模型是 Faster R-CNN。
但是,Luminoth 不仅能实现特定的模型,同时它还建立在模块化和可扩展基础之上,所以你可以直接定制它现有的部分,或者用新的模型扩展它,用于处理不同的问题,尽可能地重复利用代码。它提供了可轻松构建深度学习模型的工具:将数据转换为合适的格式反馈给各种流程中,例如用于增强数据、在一个或者多个 GPU (使用大型数据集时必须进行分布式训练)上训练、运行评估指标。
此外,Luminoth 直接与 Google Cloud 的机器学习引擎集成,即使你没有强大的 GPU,也能在云端训练。
你可能从没听说过 libvips 库,它是一个图像处理库,和 Pillow 和 ImageMagick 一样,支持大量的格式。然而,和其他的库相比,libvips 更快且占用的内存更少。比如,一些基准测试显示,它比 ImageMagick 快了三倍,而 ImageMagick 占用的内存是 libvips 的十五倍。
PyVips 是最新发布的 libvips 的 Python 绑定包,它兼容 Python2.7 ~ 3.6(甚至是 PyPy),可以非常容易的用 pip 安装,并且和旧的绑定包兼容,你可以直接使用它,不需要改变任何代码。
如果你的应用程序需要处理图像,你可以留意一下 PyVips。
有时候,你需要在 Web 中自动化某些操作。无论是抓取网站,做应用测试,还是填写网页表单以便在不暴露 API 的网站中执行操作,自动化都是必须的。Python 有很好的请求库,能够执行相关的工作。但不幸的是,许多网站用 JavaScript 构建了一个非常庞大的客户端,这意味着获取的HTML 代码没有表单本身,相反,它会在浏览器中用一个前端库(如 React 或者 Vue)生成。
解决这个问题的方法之一是,对 JavaScript 代码所做的请求进行反向工程,这意味着需要花费大量的时间来调试 JavaScript 代码。另一个方法是用 Selenium 这样的库,它可以让你以编程的形式与 Web 浏览器交互并运行 JavaScript 代码。
Requestium 可以让你从请求开始无缝切换到 Selenium,并且在需要的时候增加一个浏览器开销。它集成了 Parsel,因此它在编写用于在页面中查找元素的选择器时,要比其他方式更加简洁。
skorch 是一个封装,它可以提供给 PyTorch 一个类似 sklearn 的编程界面。如果你熟悉这些库,这些语法应该简单易懂。通过 skorch,你会得到经过抽象的代码,所以你可以把精力花在真正重要的事情上,比如做数据科学研究。
探寻有趣之事!