在一次大学作业中,我曾经使用一个硬件描述语言,通过添加和改变 CPU 暂存器中的字节来编码除法(division)。这是一个很有趣的练习,但是我非常确定,我不想用这种方式对神经网络进行编码。使用一个更高级别的语言的好处是显而易见的:更快地编码、更少的bug,以及,更少的痛苦。Keras 的好处还有更多——它更适配神经网络的概念,能促进新的发现。Keras 让我更加擅长神经网络,因为语言抽象与神经网络的概念搭配得更加好。 使用与我的思维相同的概念语言写程序,能让我把注意力集中在需要解决的难题上,而不是编程语言的伪迹上。因为,当我把更多的精力花在头脑中的思维与编程语言之间的概念转换的时候,我的思考就会变慢。TensorFlow 影响了我的生产力。 正如 Chollet 所写:“如果你想要长期使用一个更高级别的面向对象的 TF API ,Karas 就是正确的道路。”
Keras 的作者、谷歌 AI 研究员 Francois Chollet 在谷歌TensorFlow 开发者大会上演讲。 TensorFlow 1.0 重大功能及改善 XLA(实验版):初始版本的XLA,针对TensorFlow图(graph)的专用编译器,面向CPU和GPU。 TensorFlow Debugger(tfdbg):命令行界面和API。 添加了新的python 3 docker图像。 使pip包兼容pypi。TensorFlow现在可以通过 pip install tensorflow 命令安装。 更改了几个python API的调用方式,使其更类似 NumPy。 新的(实验版)Java API。 Android:全新人物检测+跟踪演示实现——“Scalable Object Detection using DNN”(带有额外的YOLO对象检测器支持)。 Android:全新基于摄像头的图像风格转换演示,使用了神经网络艺术风格转换技术。 重大 API 变动 为了帮助你升级现有的TensorFlow Python代码匹配以下 API 更改,我们准备了一个转换脚本: 此工具让你升级现有的TensorFlow Python脚本。此脚本可以在单个Python文件上运行: tf_upgrade.py --infile foo.py --outfile foo-upgraded.py 如果无法修复,系统会打印一个错误列表。你还可以在目录树上运行它: tf_upgrade.py --intree coolcode -outtree coolcode-upgraded 在上述任一情况下,系统会将转储一份报告,详细记录变化情况: third_party/tensorflow/tools/compatibility/test_file_v0.11.py Line 125 Renamed keyword argument from `dim` to `axis` Renamed keyword argument from `squeeze_dims` to `axis` Old: [[1, 2, 3]], dim=1), squeeze_dims=[1]).eval(), ~~~~ ~~~~~~~~~~~~~ New: [[1, 2, 3]], axis=1), axis=[1]).eval(), ~~~~~ ~~~~~ TensorFlow / models已经被移动到一个单独的github库。 除法和模运算符(/,//,%)现在匹配 Python(flooring)语义。这也适用于 [tf.div] 和 [tf.mod]。要获取基于强制整数截断的行为,可以使用 [tf.truncatediv] 和 [tf.truncatemod]。 现在推荐使用 [tf.divide()] 作为除法函数。[tf.div()] 将保留,但它的语义不会回应 Python 3 或 [from future] 机制。 tf.reverse() 现在取轴的索引要反转。例如 [tf.reverse(a,[True,False,True])] 现在必须写为 [tf.reverse(a,[0,2])]。 [tf.reverse_v2()] 将保持到 TensorFlow 1.0 最终版。 [tf.mul,tf.sub ] 和 [tf.neg] 不再使用,改为 [tf.multiply],[tf.subtract] 和 [tf.negative]。 [tf.pack] 和 [tf.unpack] 弃用,改为 [tf.stack] 和 [tf.unstack]。 [TensorArray.pack] 和 [TensorArray.unpack] 在弃用过程中,将来计划启用 [TensorArray.stack] 和 [TensorArray.unstack]。 以下Python函数的参数在引用特定域时,全部改为使用 [axis]。目前仍将保持旧的关键字参数的兼容性,但计划在 1.0 最终版完成前删除。 tf.argmax: dimension 变为 axis tf.argmin: dimension 变为 axis tf.count_nonzero: reduction_indices 变为 axis tf.expand_dims: dim 变为 axis tf.reduce_all: reduction_indices 变为 axis tf.reduce_any: reduction_indices 变为 axis tf.reduce_join: reduction_indices 变为 axis tf.reduce_logsumexp: reduction_indices 变为 axis tf.reduce_max: reduction_indices 变为 axis tf.reduce_mean: reduction_indices 变为 axis tf.reduce_min: reduction_indices 变为 axis tf.reduce_prod: reduction_indices 变为 axis tf.reduce_sum: reduction_indices 变为 axis tf.reverse_sequence: batch_dim 变为 batch_axis, seq_dim 变为 seq_axis tf.sparse_concat: concat_dim 变为 axis tf.sparse_reduce_sum: reduction_axes 变为 axis tf.sparse_reduce_sum_sparse: reduction_axes 变为 axis tf.sparse_split: split_dim 变为 axis tf.listdiff 已重命名为 tf.setdiff1d 以匹配 NumPy 命名。 tf.inv 已被重命名为 tf.reciprocal(组件的倒数),以避免与 np.inv 的混淆,后者是矩阵求逆。 tf.round 现在使用 banker 的舍入(round to even)语义来匹配 NumPy。 tf.split现在以相反的顺序并使用不同的关键字接受参数。我们现在将NumPy order 匹配为tf.split(value,num_or_size_splits,axis)。 (责任编辑:本港台直播) |