一、什么是TensorFlow?
TensorFlow是全面的深度学习框架支持非常全面不是专门为客户端设计
特点:
1、真正的可移植性: 引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端, 如安卓设备、ios、树莓派等等
2、多语言支持: Tensorflow 有一个合理的c++使用界面,也有一个易用的python使用界面来构建和 执行你的graphs,你可以直接写python/c++程序。
3、高度的灵活性与效率: TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库 能够灵活进行组装图,执行图。随着开发的进展,Tensorflow的效率不算在提高
4、支持:TensorFlow 由谷歌提供支持,谷歌投入了大量精力开发 TensorFlow,它希望 TensorFlow 成为机器学习研究人员和开发人员的通用语言
二、图
图的创建:
tf.Graph()
使用新创建的图
g = tf.Graph()
with g.as_default():
a = tf.constant(1.0)
assert c.graph is g
图默认已经注册,一组表示 tf.Operation计算单位的对象和tf.Tensor 表示操作之间流动的数据单元的对象
获取调用: tf.get_default_graph() op、sess或者tensor 的graph属性
三、op(运算)
四、会话
tf.Session()
运行TensorFlow操作图的类,使用默认注册的图(可以指定运行图) 会话资源 会话可能拥有很多资源,
如 tf.Variable,tf.QueueBase 和tf.ReaderBase,会话结束后需要进行资源释放 sess = tf.Session() sess.run(...) sess.close()
使用上下文管理器 with tf.Session() as sess: sess.run(...) config=tf.ConfigProto(log_device_placement=True)
交互式:tf.InteractiveSession()
五、会话中的run()方法
run(fetches, feed_dict=None,graph=None) 运行ops和计算tensor 嵌套列表,元组, namedtuple,dict或OrderedDict(重载的运算符也能运行)
feed_dict 允许调用者覆盖图中指定张量的值,提供给 placeholder使用
返回值异常
RuntimeError:如果它Session处于无效状态(例如已关闭)。
TypeError:如果fetches或feed_dict键是不合适的类型。
ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在。
六、测试代码
import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' # 创建一张图包含了一组op和tensor,上下文环境 # op:只要使用tensorflow的API定义的函数都是OP # tensor:就指代的是数据 g = tf.Graph() print(g) with g.as_default(): c = tf.constant(11.0) print(c.graph) # 实现一个加法运算 a = tf.constant(5.0) b = tf.constant(6.0) sum1 = tf.add(a, b) # 默认的这张图,相当于是给程序分配一段内存 graph = tf.get_default_graph() print(graph) # 不是op不能运行 var1 = 2.0 # var2 = 3 # sum2 = var1 + var2 # 有重载的机制,默认会给运算符重载成op类型 sum2 = a + var1 print(sum2) # s = tf.Session() # # s.run() # s.run() # s.close() # 只能运行一个图, 可以在会话当中指定图去运行 # 只要有会话的上下文环境,就可以使用方便eval() # 训练模型 # 实时的提供数据去进行训练 # placeholder是一个占位符,feed_dict一个字典 plt = tf.placeholder(tf.float32, [2, 3, 4]) print(plt) with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess: # print(sess.run(plt, feed_dict={plt: [[1, 2, 3], [4, 5, 36], [2, 3, 4]]})) # print(sum1.eval()) print(a.graph) print("---------") print(a.shape) print(plt.shape) print("-------") print(a.name) print("-------") print(a.op)