keras的背景
keras是开源高层深度学习API。所谓“高层”,是相对于“底层”运算而言(例如add,matmul,transpose,conv2d)。keras把这些底层运算封装成一些常用的神经网络模块类型(例如Dense, Conv2D, LSTM等),再加上像Model、Optimizer等的一些的抽象,来增强API的易用性和代码的可读性,提高深度学习开发者编写模型的效率。keras本身并不具备底层运算的能力,所以它需要和一个具备这种底层运算能力的backend(后端)协同工作。
keras的特性之一就是可以互换的后端,你在所有后端上写的keras代码都是一样的。从一个后端训练并存储的模型,可以用别的后端加载并运行。
tf.keras
一个不强调后端可互换性、和tensorflow更紧密整合、得到tensorflow其他组建更好支持、且符合keras标准的高层次API。
Tensorflow-keras和keras的共同点
1.基于同一套API
如果不使用tf.keras的特有特性的话,模型搭建、训练、和推断的代码应该是可以互换的。
把import keras 换成from tensorflow import keras,所有功能都应该可以工作。反之则未必,因为tf.keras有一些keras不支持的特性。
2.相同的json和hdf5模型序列化格式和语义
从一方用model.to_json() 或model.save()保存的模型,可以在另一方加载并以同一语义运行。
TensorFlow的生态里面那些支持HDF5或JSON格式的其他库,比如TensorFlow.js,也同等支持keras和tf.keras保存的模型。
Tensorflow-keras和keras的区别
1.tf.keras全面支持tensorflow的eager execution模式
eager execution是TensorFlow未来首推的另一个主要特性,也和易用性有关。
2.tf.keras支持基于tf.data的模型训练
tf.data是TensorFlow自2017年初左右推出的新特性。由于基于lazy范式、使用了多线程数据输入管路,tf.data可以显著提高模型训练的效率,同时降低数据相关的代码的复杂性。
tf.data带来的性能提高,对于TPU训练来说至关重要。tf.keras.Mode.fit()直接支持tf.data.Dataset 或iterator对象作为输入参数。
3.tf.keras支持TPU训练
TPU是Google自己研发的深度学习模型训练加速硬件,现在在很多训练任务上持有State of the art的性能。
用户可以用`tf.contrib.tpu.keras_to_tpu_model()`将一个tf.keras.Model对象转换成一个可以在TPU上进行训练的模型对象。
4.tf.keras支持tf.distribution里面的DistributionStrategy进行多GPU或多机分布式训练
tf.distribution是tensorflow里面比较新的API,提供一套易用的分布式训练的抽象,帮助用户实现多卡或多机模型训练。
keras也支持多GPU训练,但是基于一个不同的API:keras.utils.multi_gpu_model
5.tf.keras的其他特有特性:
tf.keras.models.model_to_estimator():将模型转换成estimator对象 。
tf.contrib.saved_model.save_keras_model():将模型保存为tensorflow的SavedModel格式。
那我应该选择keras还是tf.keras呢?
如果你需要任何一个上述tf.keras的特有特性的话,那当然应该选择tf.keras。
如果后端可互换性对你很重要的话,那选择keras。
如果以上两条对你都不重要的话,那选用哪个都可以。
参考文章:https://blog.csdn.net/hellocsz/article/details/88875304