未探索的TensorFlow库

TensorFlow是一个端到端的开源机器学习平台 , 能够执行一系列任务 。 它为初学者和研究人员提供了一个易用性 , 可以用于不同的应用 , 如 , 但不限于 , 计算机视觉 , 自然语言处理和强化学习 。
未探索的TensorFlow库文章插图
在计算机视觉领域 , 我们大多数人都熟悉TensorFlow的核心以及TensorFlow Lite和JS 。 它们用于在移动设备和边缘设备上运行模型 , 为后者在web上运行模型 。 然而 , TensorFlow还提供了更多神秘的库 , 我们将在本文中对此进行解释 。
目录

  • TensorFlow模型优化工具包
  • TensorFlow Graphics
  • TensorFlow Federated
  • TensorFlow Privacy
  • TensorFlow Hub
TensorFlow模型优化工具包
未探索的TensorFlow库文章插图
实时模型对于许多商业操作是必不可少的 。 MobileNet的推理速度使它成为了众人瞩目的焦点 , 即使这意味着要牺牲一点准确性 。
优化TensorFlow模型首先想到的是将其转换为TensorFlow lite服务 。 但是 , 这在桌面上不太好用 , 因为它是为ARM neon优化的 。 这篇问题对此进行了解释() , 否则我们需要进一步优化模型 。 模型优化工具箱可以帮助我们完成这些任务 。 根据其主页 , 它可以用于:
减少云和边缘设备(如移动设备、物联网)的延迟和推理成本 。
将模型部署到边缘设备 , 并限制处理、内存、功耗、网络使用和模型存储空间 。
支持对现有硬件或新的专用加速器执行和优化 。
它可以应用于已经训练过的模型 , 也可以在训练期间用于进一步优化解决方案 。 在编写本文时 , 它提供了三种技术 , 以及其他一些正在进行的改进模型的技术 。
修剪第一种方法是权重剪枝 。 它的工作原理是删除层之间的一些连接 , 从而减少所涉及的参数和操作的数量 , 从而优化模型 。 在训练过程中消除了不必要的张量 。 这有助于缩小模型的大小 , 通过训练后量化可以进一步减小模型的大小 。
我不会详细介绍每个函数的细节和代码 , 因为这会使文章太长 。 你可以参考这里进一步了解和这里的代码:
量化与只在训练期间进行的修剪不同 , 量化可以在训练和测试中进行 。 Tensorflow Lite模型也被量化为使用8位整数 , 而不是通常使用的32位浮点 。 这提高了性能和效率 , 因为整数运算比浮点运算快得多 。
然而 , 这是有代价的 。 量化是一种有损技术 。 这意味着先前从-3e38到3e38表示的信息必须从-127表示到127 。 这回引入更多错误 。 为了解决这个问题 , 可以在训练期间应用量化 。
量化训练通过在训练中应用量化 , 我们迫使模型学习它将导致的差异并相应地采取行动 。 量化误差作为噪声引入 , 优化器试图将其最小化 。 用这种方法训练的模型具有与浮点模型相当的精度 。 很有意思的是 , 我们可以比较一下用这种方法创建的Tensorflow-Lite模型与普通模型 。
要了解更多关于它的信息 , 请参考这里:
对于它的代码 , 请看这里:#see_persistence_of_accuracy_from_tf_to_tflite
训练后量化虽然最好在训练期间应用量化 , 但有时这样做是不可行的 , 因为我们可能有预训练好的权重可供使用 。
更多信息可以在这里找到:
以及代码:
权重聚类它将相似的权重组合起来 , 并用一个值替换它们 。 它可以想象成JPEG压缩 。 此外 , 由于相似的权重被插值到相同的数目 , 它也是有损的 。
权重矩阵原本存储浮点值 。 这些值被转换成整数 , 整数代表簇号 。 我们再存储包含簇的查找表以便查询 。 这减少了所需的空间 , 因为整数需要更少的存储空间 。
如下面的示例所示 , 16个float-32值被指定给4个float-32质心 , 层权重被转换为整数值 。 权重矩阵越大 , 节省的空间就越大 。
未探索的TensorFlow库文章插图
聚类应用于训练好的模型中 , 以找到质心 。 然后任何压缩工具都可以用来缩小模型的大小 。 要了解它的详细信息 , 请参阅此处及其实现:
可以结合不同的技术来进一步减少延迟 , 并且计划更多的方法 , 如他们的路线图中所讨论的那样: 。
TensorFlow Graphics
未探索的TensorFlow库文章插图
TensorFlow graphics旨在将计算机视觉和计算机图形学结合起来 , 解决复杂的三维任务 。
计算机图形工作流需要三维对象及其在场景中的绝对位置、对它们由灯光构成的材质的描述以及生成合成渲染的摄影机 。 另一方面 , 计算机视觉工作流将从图像开始 , 并尝试推导其参数 。