python 查tensorflow版本_TensorFlow版本兼容性

webchat.jpg

文章目录

本文档适用于需要向后兼容的用户 TensorFlow(用于代码或数据)的版本,以及需要的开发人员 在保持兼容性的同时修改TensorFlow。

语义版本2.0

TensorFlow遵循语义版本2.0(semver) 公共API。每个发布版本的TensorFlow都有MAJOR.MINOR.PATCH的形式。

例如,TensorFlow 1.2.3版本有MAJOR版本1,MINOR版本2, 和PATCH版本3.每个数字的更改具有以下含义:

主要:潜在的后向不兼容的变化。代码和数据 与以前的主要版本一起工作不一定与新的工作 发布。但是,在某些情况下,现有的TensorFlow图和检查点

可能会迁移到较新的版本;看到 图形和检查点的兼容性 有关数据兼容性的细节。 MINOR:向后兼容功能,速度提升等等

与之前的次要版本一起工作的数据,并且仅依赖于 公共API将继续工作不变。关于什么是和是的细节 不是公共API,看看是什么涵盖。

补丁:向后兼容的错误修复。

例如,1.0.0版引入了向后不兼容的更改 释放0.12.1。但是,版本1.1.1与版本向后兼容 1.0.0。

什么是覆盖

只有TensorFlow的公共API向后兼容minor和 补丁版本。公共API包含

所有记录在Python中的函数和类 tensorflow模块及其子模块除外 tf.contrib的功能和类别

名称以_开头的函数和类(因为它们是私有的) 请注意,examples/和tools/目录中的代码不是 可通过tensorflow

Python模块访问,因此不在此列 兼容性保证。

如果一个符号可以通过tensorflow Python模块或者它的 子模块,但没有记录,那么它不被视为的一部分 公共API。

C API。 以下协议缓冲区文件: attr_value config event graph op_def reader_base

summary tensor tensor_shape types

什么不包括

某些API函数明确标记为“实验性”,可以更改 后向不兼容的方式在次要版本之间。这些包括:

实验性API:Python中的tf.contrib模块及其子模块 以及C API中的任何函数或协议缓冲区中的字段 明确表示是实验性的。

其他语言:Python和C以外的其他语言的TensorFlow API, 如: C ++(通过头文件公开的

tensorflow/cc)。 Java中, 走 复合操作的细节:Python中的许多公共函数扩展为

图中的几个原始操作,这些细节将成为任何的一部分 以GraphDef的形式保存到磁盘。这些细节可能会改变

次要版本。尤其是,回归测试,确切地检查 甚至,图形之间的匹配可能会跨越次要版本 尽管图的行为应该不变并存在 检查站仍然有效。

浮点数值细节:具体的浮点值 由运营商计算可能会随时改变。用户应该只依靠 近似精度和数值稳定性,而不是特定的位

计算。在次要和补丁版本中对数字公式的更改应该是 导致准确性相当或提高,与机器中的警告 学习提高特定公式的准确性可能会导致下降

整个系统的准确性。 随机数字:由特定的随机数字计算的 随机操作可能随时改变。 用户应该只依靠大致正确的分配和

统计强度,而不是计算的具体位数。但是,我们会做出 随机位的变化很少(也可能永远不会)发布。我们 当然会记录所有这些变化。

分布式Tensorflow中的版本偏差:运行两个不同的版本 TensorFlow在单个群集中不受支持。没有保证 关于有线协议的向后兼容性。

错误:我们保留向后兼容行为的权利 (尽管不是API)如果当前实现明显中断, 也就是说,如果它与文档相矛盾,或者如果是知名的

明确的预期行为由于错误而不能正确执行。 例如,如果一个优化器宣称要实现一个众所周知的优化 算法,但由于错误而不匹配该算法,则我们将修复

优化器。我们的修复可能会破坏依赖于错误行为的代码 收敛。我们会在发行说明中注意到这些变化。 错误消息:我们保留更改错误文本的权利

消息。另外,错误的类型可能会改变,除非类型是 在文档中指定。例如,一个函数记录到 举一个InvalidArgument异常会继续

提高InvalidArgument,但人类可读的信息内容可以改变。

图形和检查点的兼容性

你有时需要保存图形和检查点。 图表描述了在训练期间运行的操作的数据流 推理和检查点包含保存在变量中的张量值 图形。

许多TensorFlow用户将图形和训练好的模型保存到磁盘 后来的评估或额外的培训,但最终运行他们保存的图表

或更高版本的模型。符合semver,任何图形或检查点 用一个版本的TensorFlow写出来就可以加载和评估一个

更高版本的TensorFlow与主要版本相同。但是,我们会 尽力在主要版本之间保持向后兼容性 可能的,以便序列化的文件可以长时间使用。

图表通过GraphDef协议缓冲区进行序列化。为了方便(罕见) 向后不兼容的图形变化,每个GraphDef都有一个版本号

与TensorFlow版本分开。例如,GraphDef版本17 inv不赞成使用reciprocal。语义是:

TensorFlow的每个版本都支持GraphDef版本的间隔。这个 间隔将在不同的补丁版本之间保持不变,并且只会越来越大

次要版本。只能删除对GraphDef版本的支持 为TensorFlow的主要版本。 新创建的图表分配了最新的GraphDef版本号。

如果给定版本的TensorFlow支持图形的GraphDef版本, 它将加载和评估与TensorFlow版本相同的行为

用于生成它(除了浮点数字细节和随机 数字),而不考虑TensorFlow的主要版本。尤其是所有 检查点文件将是兼容的。

如果GraphDef上限在(次要)版本中增加到X,那么 在下限增加到X之前至少6个月 例子(我们在这里使用假设的版本号): TensorFlow

1.2可能支持GraphDef版本4至7。 TensorFlow 1.3可以添加GraphDef版本8并支持版本4到8。

至少半年后,TensorFlow 2.0.0可能会放弃支持 版本4到7,只剩下版本8。

最后,在支持GraphDef版本的时候,我们会试着去做 提供自动将图形转换为新的支持的工具 GraphDef版本。

扩展TensorFlow时的图形和检查点兼容性

只有在对GraphDef进行不兼容的更改时,本节才有意义 格式,如添加操作,删除操作或更改功能 现有的操作。上一节应该足以满足大多数用户的需求。

向后和部分向前兼容

我们的版本方案有三个要求:

向后兼容性,支持加载图形和检查点 用旧版本的TensorFlow创建。 向前兼容性,以支持生产者的场景

图形或检查点之前升级到更新版本的TensorFlow 消费者。 以不兼容的方式启用进化的TensorFlow。例如,删除Ops,

添加属性和删除属性。

请注意,GraphDef版本机制与TensorFlow分离 版本,向后不兼容GraphDef格式的更改仍然存在

受语义版本的限制。这意味着功能只能被删除 或在MAJOR版本的TensorFlow(如1.7到2.0)之间进行更改。

另外,在补丁版本(1.x.1)中强制执行向前兼容性 以1.x.2为例)。

实现向前和向后兼容性,并知道何时执行更改 在格式中,图形和检查点都有描述它们的时间的元数据 被生产了。下面的章节详细介绍了TensorFlow的实现和

不断发展的GraphDef版本指南。

独立的数据版本计划

图形和检查点有不同的数据版本。这两个数据 格式的演变速度不同,速度也不同 来自TensorFlow。两个版本控制系统都在

core/public/version.h。 每当添加新版本时,会在标题中添加注释,详细说明内容 改变和日期。

数据,生产者和消费者

我们区分以下几种数据版本信息: 生产者:生成数据的二进制文件。生产者有一个版本 (producer)以及兼容的最低消费版本

(min_consumer)。 消费者:消耗数据的二进制文件。消费者有一个版本 (consumer)和它们兼容的最低生产者版本

(min_producer)。

每个版本化数据都有一个VersionDef 版本 记录制作数据的producer,min_consumer

它与bad_consumers版本兼容 不允许。

默认情况下,当生产者创建一些数据时,数据会继承生产者的数据 producer和min_consumer版本。

bad_consumers可根据具体情况进行设置 已知消费者版本包含错误,必须避免。消费者可以 接受一段数据如果以下情况都是如此:

consumer> =数据的min_consumer 数据的producer> =消费者的min_producer

consumer不在数据的bad_consumers中

由于生产者和消费者都来自同一个TensorFlow代码库, core/public/version.h

包含一个主要的数据版本,被视为producer或 consumer取决于上下文,min_consumer和min_producer

(分别需要生产者和消费者)。特别,

对于GraphDef型号,我们有TF_GRAPH_DEF_VERSION,

TF_GRAPH_DEF_VERSION_MIN_CONSUMER,和 TF_GRAPH_DEF_VERSION_MIN_PRODUCER。

对于检查点版本,我们有TF_CHECKPOINT_VERSION, TF_CHECKPOINT_VERSION_MIN_CONSUMER,和

TF_CHECKPOINT_VERSION_MIN_PRODUCER。

不断发展的GraphDef版本

本节介绍如何使用这个版本机制来做出不同的 GraphDef格式的更改类型。

添加操作

同时向消费者和生产者添加新的作品,而不是 改变任何GraphDef版本。这种改变是自动的 向后兼容,并且不影响兼容性计划

现有的生产者脚本不会突然使用新的功能。

添加一个操作并切换现有的Python包装来使用它

实现新的消费者功能并增加GraphDef版本。 如果有可能使包装仅使用新功能 以前没有用过的情况下,包装可以现在更新。

更改Python包装以使用新功能。不要增加 min_consumer,因为不使用此操作的模型不应该中断。

删除或限制操作的功能

修复所有的生产者脚本(而不是TensorFlow本身)不使用禁止的操作或 功能。 增加GraphDef版本并实现新的消费者功能

禁止在新版本中删除GraphDefs的操作或功能 以上。如有可能,使TensorFlow停止生产GraphDefs

禁止功能。为此,请添加 REGISTER_OP(…)。已过时(deprecated_at_version, 信息)。

等待主要版本的向后兼容性的目的。 将min_producer从(2)中增加到GraphDef版本,然后删除 功能完全。

更改操作的功能

添加一个新的类似的操作命名为SomethingV2或类似的,并通过 将其添加并切换现有的Python包装来使用它的过程

如果需要向前兼容,可能需要三周的时间。 删除旧的操作(只能发生与主要版本的变化,由于 向后兼容)。

增加min_consumer排除消费者与旧的欧普,加回 旧的Op作为SomethingV2的别名,并经过这个过程切换

现有的Python包装来使用它。 通过该过程删除SomethingV2。

禁止单个不安全的消费者版本

碰撞GraphDef版本并添加坏的版本到bad_consumers

所有新的GraphDefs。如有可能,只能将GraphDefs添加到bad_consumers 其中包含一定的操作或类似的。

如果现有的消费者有不好的版本,尽快将其推出 可能。

未经作者同意,本文严禁转载,违者必究!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值