
3.1.1 TensorFlow与Keras的关系
在TensorFlow 2.0中,搭建深度学习神经网络用的是tf.keras API。tf.keras是TensorFlow对Keras的封装,并在其中添加了许多功能。在后续章节中搭建神经网络时,会较多地使用tf.keras的API,那么Keras与TensorFlow的关系是什么呢?
首先,让我们简要回顾下Keras的发展历史。Keras是于2014年由弗朗索瓦·肖莱开源的高层深度学习API。在TensorFlow 2.0中,使用Keras作为前端API,TensorFlow作为后端,这里“前端”的意思是相对于“后端”而言的。举一个例子来说,如果说深度学习搭建神经网络是在修建一栋房屋的话,那么Keras就是一堵墙、一个屋顶、一个楼梯,而TensorFlow则是砖、钢筋、水泥。使用Keras可以快速地进行一栋房屋的搭建,而不关系具体的修建细节。类比深度学习,Keras定义了如何声明全连接层、卷积层、激活层等神经网络中的高级概念,对普通用户而言,使用Keras搭建神经网络比直接使用TensorFlow要更加快捷,如图3-2所示。

图3-2 Keras与TensorFlow的关系
Keras本身并不具备实际的底层运算能力,它需要搭配一个具备底层运算能力的后台。Keras的特点就是可以互换后端。也就是说,一个后端编写并存储的模型可以在另一个后端加载并运行。在Keras最初开始流行的时候,TensorFlow还没有稳定的开源版本。当时Keras主要采用Theano(目前已停止维护)作为后端,TensorFlow在2015年正式开源发布后,Keras才慢慢开始使用TensorFlow作为后端。随后,弗朗索瓦加入Google,在TensorFlow 2.0将Keras封装为与TensorFlow结合性更好的tf.keras时,使其得到了TensorFlow组件更好的支持,同时弱化了后端可替换的特性。
于是,在TensorFlow 2.x中,可以使用tf.keras搭配Eager Exection(即使运算),进行快速神经网络搭建与验证,如图3-3所示。

图3-3 Keras的封装