TensorFlow2.0的使用(理论篇)
“tf.data”API
tf.data”API除GPU和TPU等硬件加速设备外,高效的数据输入管道也可以很大程度地提升模型性能,减少模型训练所需要的时间。
数据输入管道本质是一个ELT(Extract、Transform和Load)过程:
●Extract:从硬盘中读取数据(可以是本地的,也可以是云端的)。
●Transform:数据的预处理(如数据清洗、格式转换等)。
●Load:将处理好的数据加载到计算设备(例如CPU、GPU及TPU等)。
数据输入管道一般使用CPU来执行ELT过程,GPU等其他硬件加速设备则负责模型的训练,ELT过程和模型的训练并行执行,从而提高模型训练的效率。另外ELT过程的各个步骤也都可以进行相应的优化,例如并行地读取和处理数据等。在TensorFlow中可以使用“tf.data”API来构建这样的数据输入管道。
“tf.keras”API
Keras是一个基于Python编写的高层神经网络API,其后端可以采用TensorFlow、Theano及CNTK,目前大多是以TensorFlow作为后端引擎的。TensorFlow将Keras的代码吸收进来,并将其作为高级API提供给用户使用。“tf.keras”提高了TensorFlow的易用性,同时也保持了TensorFlow的灵活性和性能。
1.基本模型的搭建和训练
可以使用“tf.keras.Sequential”来创建基本的网络模型。通过这种方式创建的模型又称为顺序模型,因为这种模型是由多个网络层线性堆叠而成的。
“tf.keras.layers”用于生成网络层,包括全连接层(tf.keras.layers.Dense())、Dropout层(tf.keras.layers.Dropout),以及卷积网络层(如二维卷积:tf.keras.layers.Conv2D)等。
2.搭建高级模型
(1)函数式API可以使用“tf.keras.Sequential”来搭建基本的网络结构,但更多的时候我们面临的是比较复杂的网络结构,例如,模型可能有多输入或多输出、模型中的某些网络层需要共享等,此时就需要用到函数式API。
(2)实现自定义的模型类和网络层通过继承“tf.keras.Model”和“tf.keras.layers.Layer”可以实现自定义的模型类和网络层为我们构建自己的网络结构提供了非常好的灵活性。
3.回调函数
回调函数会在模型的训练阶段被执行,可以用来自定义模型训练期间的一些行为,例如输出模型内部的状态等。我们可以自己编写回调函数,也可以使用内置的一些函数,例如:
●tf.keras.callbacks.ModelCheckpoint:定期保存模型。
●tf.keras.callbacks.LearningRateScheduler:动态地改变学习率。
●tf.keras.callbacks.EarlyStopping:当模型在验证集上的性能不再提升时终止训练。
●tf.keras.callbacks.TensorBoard:使用TensorBoard来监测模型。
4.模型的保存和恢复使用“model.save()”和“tf.keras.models.load_model()”来保存和加载由“tf.keras”训练的模型。通过“model.save()”保存的是一个完整的模型信息,包括模型的权重和结构等。除保存完整的模型外,还可以单独保存模型的权重参数或者模型的结构。
“tf.data”和“tf.keras”的理论介绍到此告一个段落,下一篇将从代码实战开始。
- 点赞
- 收藏
- 关注作者
评论(0)