接下来,每天推送一道BAT的面试题,一般问到的这些知识点都是很重要的,所以知道的就再复习一下,不知道的希望这篇可以帮助到你。日积月累,你会在不知不觉中就步入机器学习的大门,并且越走越远。同时,还能助你顺利拿到OFFER.
今天BAT系列 第二题 请简要介绍下Tensorflow的计算图
TensorFlow哲学
separates definition of computations from their execution
对定义计算和计算的执行做了分离。
tensorflow的编程和以往接触的编程方式有很大差异。以前的编程,无论是编译类型语言还是动态解释型语言,变量计算后,就会得到结果,比如c=a+b,当执行完语句后,就会得到c的值。
但, tensorflow不是!
首先看一下,tensor是什么?它是一个 n 维数组: 0-d tensor: scalar (标量) 1-d tensor: vector (向量) 2-d tensor: matrix(矩阵)
…
有了tensor, 那么tensorflow的计算流图就可以构建为下面这个样子,圆形节点代表tensor间执行的操作:
比如对两个tensor执行一个add操作:
1import tensorflow as tf
2a = tf.add(3, 5)
接下来,我们打印 a,看看发生什么:
1print (a)
2Tensor("Add:0", shape=(), dtype=int32)
这就验证了之前所说,计算图和执行计算图做了严格的分离,所以此时打印得不到a值。
如何得到a值?
创建session,并在当前的sess中执行构建的图得到a的值。
1with tf.Session() as sess:
2 print(sess.run(a))
预告:BAT面试题3: 请问GBDT和XGBoost的区别是什么?
总结
Session对象封装了tensorflow的执行环境。记住:计算图只是定义了operations,operations只有在session里面执行才能真正得到计算图的结果。