作者|Vardan Agarwal
编译|VK
来源|Towards Datas Science
TensorFlow是一个端到端的开源机器学习平台,能够执行一系列任务。它为初学者和研究人员提供了一个易用性,可以用于不同的应用,如,但不限于,计算机视觉,自然语言处理和强化学习。
在计算机视觉领域,我们大多数人都熟悉TensorFlow的核心以及TensorFlow Lite和JS。它们用于在移动设备和边缘设备上运行模型,为后者在web上运行模型。然而,TensorFlow还提供了更多神秘的库,我们将在本文中对此进行解释。
目录
- TensorFlow模型优化工具包
- TensorFlow Graphics
- TensorFlow Federated
- TensorFlow Privacy
- TensorFlow Hub
TensorFlow模型优化工具包
实时模型对于许多商业操作是必不可少的。MobileNet的推理速度使它成为了众人瞩目的焦点,即使这意味着要牺牲一点准确性。
优化TensorFlow模型首先想到的是将其转换为TensorFlow lite服务。但是,这在桌面上不太好用,因为它是为ARM neon优化的。这篇问题对此进行了解释(https://github.com/tensorflow...),否则我们需要进一步优化模型。模型优化工具箱可以帮助我们完成这些任务。根据其主页,它可以用于:
减少云和边缘设备(如移动设备、物联网)的延迟和推理成本。将模型部署到边缘设备,并限制处理、内存、功耗、网络使用和模型存储空间。
支持对现有硬件或新的专用加速器执行和优化。
它可以应用于已经训练过的模型,也可以在训练期间用于进一步优化解决方案。在编写本文时,它提供了三种技术,以及其他一些正在进行的改进模型的技术。
修剪
第一种方法是权重剪枝。它的工作原理是删除层之间的一些连接,从而减少所涉及的参数和操作的数量,从而优化模型。在训练过程中消除了不必要的张量。这有助于缩小模型的大小,通过训练后量化可以进一步减小模型的大小。
我不会详细介绍每个函数的细节和代码,因为这会使文章太长。你可以参考这里进一步了解和这里的代码:https://www.tensorflow.org/mo...
量化
与只在训练期间进行的修剪不同,量化可以在训练和测试中进行。Tensorflow Lite模型也被量化为使用8位整数,而不是通常使用的32位浮点。这提高了性能和效率,因为整数运算比浮点运算快得多。
然而,这是有代价的。量化是一种有损技术。这意味着先前从-3e38到3e38表示的信息必须从-127表示到127。这回引入更多错误。为了解决这个问题,可以在训练期间应用量化。
量化训练
通过在训练中应用量化,我们迫使模型学习它将导致的差异并相应地采取行动。量化误差作为噪声引入,优化器试图将其最小化。用这种方法训练的模型具有与浮点模型相当的精度。很有意思的是,我们可以比较一下用这种方法创建的Tensorflow-Lite模型与普通模型。
要了解更多关于它的信息,请参考这里:https://blog.tensorflow.org/2...
对于它的代码,请看这里:https://www.tensorflow.org/mo...
训练后量化
虽然最好在训练期间应用量化,但有时这样做是不可行的,因为我们可能有预训练好的权重可供使用。
更多信息可以在这里找到:https://blog.tensorflow.org/2...
以及代码:https://www.tensorflow.org/mo...
权重聚类
它将相似的权重组合起来,并用一个值替换它们。它可以想象成JPEG压缩。此外,由于相似的权重被插值到相同的数目,它也是有损的。
权重矩阵原本存储浮点值。这些值被转换成整数,整数代表簇号。我们再存储包含簇的查找表以便查询。这减少了所需的空间,因为整数需要更少的存储空间。
如下面的示例所示,16个float-32值被指定给4个float-32质心,层权重被转换为整数值。权重矩阵越大,节省的空间就越大。
聚类应用于训练好的模型中,以找到质心。然后任何压缩工具都可以用来缩小模型的大小。要了解它的详细信息,请参阅此处及其实现:https://www.tensorflow.org/mo...
可以结合不同的技术来进一步减少延迟,并且计划更多的方法,如他们的路线图中所讨论的那样:https://www.tensorflow.org/mo...。
TensorFlow Graphics
TensorFlow graphics旨在将计算机视觉和计算机图形学结合起来,解决复杂的三维任务。
计算机图形工作流需要三维对象及其在场景中的绝对位置、对它们由灯光构成的材质的描述以及生成合成渲染的摄影机。另一方面,计算机视觉工作流将从图像开始,并尝试推导其参数。
这可以看作是一个自编码器,视觉系统(编码器)将尝试查找参数,而图形系统(解码器)将基于这些参数生成图像,并与原始图像进行比较。此外,该系统不需要标记数据,也不需要以自我监督的方式训练。一些用途是:
- 变换-可以对对象执行旋转和平移等对象变换。这可以通过神经网络学习来精确地找到物体的位置。它对于需要精确估计这些物体位置的机械手臂很有用。
- 建模摄像机-可以设置不同的摄像机内部参数来改变图像的感知方式。例如,更改摄影机的焦距会更改对象的大小。
- 材料-可以使用具有不同类型光反射能力的不同类型的材料。因此,创建的场景可以精确地模拟对象在真实世界中的行为。
- 三维卷积和池(点云和网格)-它有三维卷积和池层,允许我们对三维数据进行语义分类和分割。
- TensorBoard 3D-3D数据变得越来越普遍,可以用来解决从2D数据进行三维重建、点云分割、3D对象变形等问题。通过TensorBoard 3D,这些结果可以可视化,从而更好地了解模型。
进一步阅读:https://blog.tensorflow.org/2...
TensorFlow Federated
这个库也可以用于计算机视觉以外的其他领域。随着移动设备和边缘设备数量的增加,产生了大量的数据。
联邦学习的目标是在分散数据上执行机器学习,即在设备本身上!这意味着不需要向服务器上传大量(敏感)数据。它已经在谷歌键盘上使用。
下面的视频解释了联邦学习的,从分散数据到使用TensorFlow federated。
有关使用TensorFlowFederated进行图像分类的指南,请参阅下面链接的文章。
https://www.tensorflow.org/fe...
TensorFlow Privacy
通过隐私攻击可以从经过训练的ML模型中提取敏感信息。Truex等人,提出了一篇关于驱动它的因素的论文(https://arxiv.org/pdf/1807.09...)。如本文所示(https://www.cs.cmu.edu/~mfred...),这些模型甚至可以重建训练所依据的信息。
左侧是仅使用人名和模型重建的图像。右边的图像是原始图像。
同样,像TensorFlow Federated一样,这并不是计算机视觉所独有的。最常用的技术是差分隐私。来自维基百科:https://en.wikipedia.org/wiki...
差分隐私一种公开共享数据集信息的系统,通过描述数据集中组的模式,同时保留数据集中个人的信息。
假设敏感信息不会在数据集中完全重复,通过使用差分隐私模型,可以确保模型不会学习此类信息。
例如,假设有一个人与人之间聊天的数据集。现在,聊天中传递的敏感信息可以是密码、银行帐户详细信息等。因此,如果在这个数据集上创建了一个模型,则差分隐私将确保该模型无法学习这些细节,因为这些信息的数量很少。阅读这篇关于差分隐私的文章,它还包含了执行它的代码。
http://www.cleverhans.io/priv...
TensorFlow Hub
你们中的大多数人一定对这个库有所了解,所以我对它的介绍将非常简短。
TensorFlow Hub是一个在TensorFlow中发布、发现和重用部分机器学习模块的平台。把它称为TensorFlow模型的GitHub是正确的。
开发人员可以共享他们预训练过的模型,然后可以被其他人重用。通过重用,开发人员可以使用较小的数据集训练模型,提高泛化能力,或者只是加快训练速度。让我们快速了解一下现有的几种不同的计算机视觉模型。
- 图像分类——从MobileNet到Inception 再到EfficientNet,有一百多个可用于此任务的模型。说出你想要的任何型号,很可能会在那里找到它。
- 对象检测和分割-同样,你需要的任何模型都可以在这里找到,特别是在COCO数据集上训练的TensorFlow model-zoo对象检测器的集合中。Deeplab架构在图像分割领域占据主导地位。还有大量的TfLite和TensorFlow Js模型可用。
- 图像样式化-图像样式化的不同的主干,以及一个卡通感兴趣。
- 生成对抗网络-提供了像Big GAN和Compare GAN这样的GAN模型,在ImageNet和Celeb数据集上进行训练。还有一个无边界的GAN,可以用来生成摄像机捕捉到的场景之外的区域。此外,他们中的大多数有一个Colab Notebook,所以实现他们不会太难。
我刚刚描述了冰山一角。我甚至还没有讨论过很多关于模型匹配的问题。跳到他们的页面上了解更多:https://tfhub.dev/
你也可以在这里找到它的教程:https://www.tensorflow.org/hu...
TensorFlow提供了更多的库,比如TensorFlow Extended(https://www.tensorflow.org/re...),一个用于部署ML管道的库 Magenta(https://magenta.tensorflow.org/),一个用于生成音乐的库(https://www.tensorflow.org/re...,等等。
请在这里查看完整的列表:https://www.tensorflow.org/re...
原文链接:https://towardsdatascience.co...
欢迎关注磐创AI博客站:
http://panchuang.net/
sklearn机器学习中文官方文档:
http://sklearn123.com/
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。