谷歌正式发布TensorFlow 1.5,究竟提升了哪些功能?
昨天,谷歌在 GitHub 上正式发布了 TensorFlow 的最新版本 1.5.0,并开源了其代码。支持 CUDA 9 和 cuDNN 7 被认为是本次更新的最重要部分。机器之心对这次更新的重大改变以及主要功能和提升进行了编译介绍,原文请见文中链接。
GitHub 地址:https://github.com/tensorflow/tensorflow/releases/tag/v1.5.0
源代码(zip):https://github.com/tensorflow/tensorflow/archive/v1.5.0.zip
源代码(tar.gz):https://github.com/tensorflow/tensorflow/archive/v1.5.0.tar.gz
1.5.0 正式版
重大更新
预构建的二进制文件现在是针对 CUDA 9 和 cuDNN 7 构建的。
从版本 1.6 开始,我们的预构建二进制文件将使用 AVX 指令。这也许会破坏较旧 CPUs 上的 TF。
主要功能和提升
Eager execution:预览版现在可用。
TensorFlow Lite:dev 预览版现在可用。
支持 CUDA 9 和 cuDNN 7
加速线性代数(XLA):
添加 complex64 支持到 XLA 编译器。
bfloat 支持现已添加到 XLA 架构。
使 XLA 和 XLA 一起工作。
通过决定性执行程序来生成 XLA 图。
tf.contrib:
tf.contrib.distributions:
添加 tf.contrib.distributions.Autoregressive。
使 tf.contrib.distributions QuadratureCompound 类支持批处理。
从参数中推断 tf.contrib.distributions.RelaxedOneHotCategorical dtype。
通过 quadrature_grid_and_prob vs quadrature_degree 使 tf.contrib.distributions 正交族参数化。
添加 auto_correlation 到 tf.contrib.distributions。
添加 tf.contrib.bayesflow.layers,一个概率(神经)层的集合。
添加 tf.contrib.bayesflow.halton_sequence。
添加 tf.contrib.data.make_saveable_from_iterator。
添加 tf.contrib.data.shuffle_and_repeat。
添加新的自定义转换: tf.contrib.data.scan()。
tf.contrib.distributions.bijectors:
添加 tf.contrib.distributions.bijectors.MaskedAutoregressiveFlow。
添加 tf.contrib.distributions.bijectors.Permute。
添加 tf.contrib.distributions.bijectors.Gumbel。
添加 tf.contrib.distributions.bijectors.Reshape。
支持 Reshape bijector 中的 shape 推理(即,包含-1 的 shape)。
添加 streaming_precision_recall_at_equal_thresholds,一种计算流式精确度和时间、空间复杂度为 O(num_thresholds + size of predictions) 的调用的方法。
更改 RunConfig 默认行为,不设置随机种子,使随机行为在分布式工作器上独立地随机。我们期待这可以普遍提高训练表现。依赖决定论的模型应明确设置一个随机种子。
通过 absl.flags 替换 tf.flags 的实现。
在 fp16 GEMM 中为 CUBLAS_TENSOR_OP_MATH 添加支持。
在 NVIDIA Tegra 计算卡上为 CUDA 添加支持。
Bug 修复与其他更新
文档更新:
明确你只能在 64 位机上安装 TensorFlow。
添加一个短文件解释 Estimators 如何保存检查点。
为由 tf2xla 桥支持的操作添加文档。
修改 SpaceToDepth 和 DepthToSpace 文件中的小的书写错误。
更新 mfcc_mel_filterbank.h 和 mfcc.h 中的文档命令,说明输入域是幅度谱的平方,权重
是在线性幅度谱(输入的 sqrt)上完成的。
修复 tf.distributions.bijectors.Bijector 中的文档字符串书写错误。
tf.assert_equal 不再引发 ValueError。它现在引发 InvalidArgumentError,如文档所述。
更新「开始」文件和 API 介绍。
谷歌云存储 (GCS):
为 GCS 客户端添加用户空间 DNS 缓存。
为 GCS 文件系统自定义请求超时。
优化 GCS 的文件系统缓存。
Bug 修复
修复之前出现的整数变量分区后变成错误的 shape 的 bug。
修复 Adadelta 的 CPU 和 GPU 实现的准确度 bug。
修复当导入到 scope 时,import_meta_graph 处理分区变量时出现的 bug。警告:在以非空 import_scope 变量应用 import_meta_graph 之后,这可能会破坏带已保存分区变量图的加载中的检查点。
修复离线 debugger 中阻止查看事件的 bug。
添加 WorkerService.DeleteWorkerSession 方法到 gRPC 接口,修复内存泄漏。确保你的主服务器和辅助服务器在相同版本的 TensorFlow 上运行,以避免兼容性问题。
修复 BlockLSTM cell 的 peephole 实现中的 bug。
通过重写 log_det_jacobian 的 dtype 以在 TransformedDistribution 中匹配 log_prob。
确保 tf.distributions.Multinomial 不会在 log_prob 中下溢。在此之前,一个整数变量的所有分区会以非分区变量的 shape 进行初始化;经过修复之后,可以正确地初始化。
其它
添加必要的 shape 直到支持 bfloat16。
添加一种运行 ops 的方式,在 MonitoredSession 中使用阶跃函数。
添加 DenseFlipout 概率层(probabilistic layer)。
添加一种新的 flag:ignore_live_threads,可用于训练过程。如果将其设为 True,在成功完成训练之后,它会在拆除基础建设时忽略仍在运行的线程,而不会返回 RuntimeError。
重新标准化 DenseVariational,以作为其它概率层的更简化模板。
tf.data 现在在数据集元素中支持 tf.SparseTensor。
可以进行遍历 Tensor 的计算。
允许 SparseSegmentReduction ops 拥有丢失的 segment IDs。
修改自定义导出策略以包含多维稀疏浮点数分裂(multidimensional sparse float
splits)。
由于 GPU 和 cuDNNv6 的支持,Conv2D、Conv2DBackpropInput、Conv2DBackpropFilter 现在支持任意的扩张。
Estimator 现在支持 Dataset:input_fn 可以返回 Dataset 而不是 Tensors。
添加 Revblock,一个可逆残差层的节省内存的实现。
减少 BFCAllocator 的内部碎片。
添加 cross_entropy 和 kl_divergence 到 tf.distributions.Distribution 中。
添加 tf.nn.softmax_cross_entropy_with_logits_v2,以允许标签的反向传播。
GPU 后端现在使用 ptxas 以编译生成的 PTX。
BufferAssignment 的协议缓存转储(protocol buffer dump)现在已确定。
改变 embedding op 以利用 DynamicStitch 的并行版本。
添加对稀疏多维特征列(sparse multidimensional feature columns)的支持。
加速仅有一个值的稀疏浮点数列(sparse float columns)的案例。
允许稀疏浮点数分裂(sparse float splits)以支持多价特征列(multivalent feature columns)。
添加 quantile 到 tf.distributions.TransformedDistribution。
在 GPU 上添加对 tf.depth_to_space 的 NCHW_VECT_C 支持。
在 GPU 上添加对 tf.space_to_depth 的 NCHW_VECT_C 支持。
API 变化
将 SqueezeDims 属性在 C++ API 中重命名为 Axis,作为 Squeeze op。
Stream::BlockHostUntilDone 返回 Status,而不是布尔值。
Minor refactor:将 stats 文件从 stochastic 移动到 common 并删除 stochastic。