接上一节课中使用高级抽象的API tf.keras搭建模型,本节课则介绍了基础的API来方便大家更加灵活的定义和使用模型。课程内容包括tensorflow基础数据类型、自定义模型和损失函数、自定义求导、tf.function、图结构等以及其在图像分类、房价预测上的实现。
讲tensorflow基本的API,以及怎么结合tf.keras使用。
tf基础API引入
基础API;
基础API与keras的集成(自定义损失函数;自定义层次);
@tf.function(图结构,将python的普通代码转化为tensorflow的图结构);
自定义求导。
@tf.function:
将python函数编译成图;
易于将模型导出成为GraphDef+checkpoint或者SavedModel;
使得eager execution可以默认打开,因为如果没有@tf.function的话,虽然我们可以用eager execution写代码,但是这样的代码没办法保存中间的训练结果,相当于tensorflow的功能只有一半,没有保存的图结构只能够训练无法做预测;
1.0的代码可以通过tf.function来继续在2.0里使用(可以替代session,1.0所有的图结构都要打开一个session来训练,2.0中session完全被弃用掉了,取而代之的是tf.function。)。
API列表:
基础数据类型(tf.constant,tf.string;tf.ragged.constant,tf.SparseTensor,tf.Variable);
自定义损失函数(tf.reduce_mean);
自定义层次(keras.layers.Lambda和继承法);
tf.function(tf.fucntion,tf.autograph.to_code,get_concrete_function);
GraphDef(get_operations,get_operation_by_name;get_tensor_by_name,as_graph_def);
自动求导(tf.GradientType;Optimizier.apply_gradients)。
实战tf.constant
实战tf.strings与ragged_tensor
实战sparse_tensor与tf.Variable
以上这些就是在2.0经常用到的数据类型的API,对于函数的API,在tensorflow中实在太多了,采取的方式是用到什么就讲什么,如果想要查找某种函数操作是否被实现,可以去tensorflow官网上查找。
实战自定义损失函数与DenseLayer回顾
如何使用基础的API去自定义损失函数,以及它在keras里边如何使用。
使子类与lambda分别实战自定义层次
用两种方式自定义层次。
tf.function函数转换
如何把层次函数像调普通的python函数一样去进行调用,这也是2.0里边才有的功能,1.0中是不支持的(跟结构相关的那些代码必须要打开一个session去进行使用)。一个库函数能够像python函数被调用,有什么稀奇的,库函数不是正应该如此吗,但是相反的操作也是可以进行的,即python函数能够像库函数一样被使用是不是更好呢。在tensorflow的库函数里边做了很多的优化,比如说针对编译器的等各种不同的优化,普通的python代码是没有进行优化的,如果用某种方法可以把普通的没有优化的这种函数用某种方法给变成tensorflow里边被优化后的函数是不是更好呢,这就是我们要讲的tf.function以及auto-graph。
@tf.function函数转换
函数签名与图结构
近似求导
tf.GradientTape基本使用方法
tf.GradientTape与tf.keras结合使用
章节总结