TensorFlow是开发深度学习算法的主流框架,近来随着keras和pytorch等框架的崛起,它受到了不小挑战,为了应对竞争它本身也在进化,最近新出的2.0版本使得框架的应用更加简易和容易上手,本节我们就如何使用它2.0版本提出的eager模式进行探讨,在后面章节中我们将使用它来开发较为复杂的生成型对抗性网络。
最新流行的深度学习框架keras一大特点是接口的易用性和可理解性,它在Tensorflow的基础上进行了深度封装,它把很多技术细节隐藏起来,同时调整设计模式,使得基于keras的开发比Tensorflow要简单得多。但keras对应的问题是,封装太好虽然有利于易用性,但是不利于开发人员,特别是初学者对模型设计的深入理解,由于我们主题是学习神经网络的设计原理,由于keras对模型设计模式的细节封装过度,因此反而不利于学习者。为了兼顾易用性和对设计细节的把握性,我选择TF2.0带来的Eager模式,这样就能鱼和熊掌兼得。
我们首先看看Eager模式和传统模式有何区别。传统模式一大特点是代码首先要创建一个会话对象,深度学习网络模型实际上是由多种运算节点构成的一张运算图,模型运行时需要依赖会话对象对运算图的驱动和管理,我们先看看传统模式的基本开发流程:
import tensorflow as tf
a = tf.constant(3.0)
b = tf.placeholder(dtype = tf.float32)
c = tf.add(a,b)
sess = tf.Session() #创建会话对象
init = tf.global_variables_initializer()
sess.run(init) #初始化会话对象
feed = {
b: 2.0
} #对变量b赋值
c_res = sess.run(c, feed)