TensorFlow入门知识
-————-欢迎加入学习交流QQ群:657341423
安装TensorFlow
Windows安装TensorFlow可以下载TensorFlow安装包,下载链接。安装包下载后,在CMD窗口下使用pip安装即可
TensorFlow安装成功后,我们介绍TensorFlow的相关概念,它分为三部分:计算模型、数据模型和运行模型。
计算模型-计算图
Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。
在TensorFlow程序中,系统会维护一个默认的计算图,通过tf.get_default_graph()函数可以获取当前默认的计算图:
import tensorflow as tf
a = tf.constant([1.0, 2.0], name='a')
b = tf.constant([2.0, 3.0], name='b')
print(a)
print(a.graph == tf.get_default_graph())
# 输出
Tensor("a:0", shape=(2,), dtype=float32)
True
tf.constant代表定义一个计算节点,如果该节点没有指定某个计算图,则默认放在TensorFlow的默认计算图,即tf.get_default_graph()函数所得的计算图。
除了默认计算图之外,TensorFlow支持创建新的计算图,不同计算图的资源不会共享,自定义计算图如下:
import tensorflow as tf
g1 = tf.Graph()
with g1.as_default():
# 在计算图g1里定义tf的变量
v = tf.get_variable(
'v',shape=[1],initializer=tf.zeros_initializer
)
# 读取计算图g1的变量v
with tf.Session(graph=g1) as sess:
tf.global_variables_initializer().run()
with tf.variable_scope('',reuse=True):
print(sess.run(tf.get_variable('v')))
TensorFlow的变量和计算是两个不同的概念,在此需要区分清楚。计算图Graph通过tf.Graph.device()函数来制定运行计算图的设备, 下图定义的程序可以将加法计算跑在GPU上:
g = tf.Graph()
# 指定计算运行的设备
with g.device('/gpu:0'):
result = a + b
此外,在一个计算图中,可以集合来管理不同类别的资源,通过tf.add_to_collection()函数将资源加入一个collection中,然后通过tf.get_collection获取一个集合里面的所有资源。资源可以指变量、运算节点(张量)等TensorFlow所需的资源。常用的集合列表如下:
数据模型-张量
上面讲述了 tf.constant代表定义一个计算节点,定义方式如下:
import tensorflow as tf
a = tf.constant([1.0, 2.0], name='a')
print(a)
# 输出
Tensor("a:0", shape=(2,), dtype=float32)
准确地来说,计算节点就是一个张量,当输出a的时候,其结构是张量的结构,输出内容包含三个属性:名字、维度和类型。
- 名字是张量的标识符,如“a:0”,a为计算图里面节点的名称,0代表该节点输出的一个结果,一个节点可能会有多个输出结果。
- 维度描述张量的数据属性,如(2,),代表一个一维数组,数组长度为2。如
a = tf.constant([[1.0, 2.0],[1.0, 2.0],[1.0, 2.0]], name='a')
,输出Tensor("a:0", shape=(3, 2), dtype=float32)
,这是二维数组,长度为3。 类型是数据类型,如字符串、布尔型、整型等。如果在运算的时候,如果张量的数据类型不一致,会提示报错。如:
import tensorflow as tf
a = tf.constant([[1.0],[1.0],[1.0]], name=’a’)
b = tf.constant([[1],[1],[1]], name=’b’)
print(a+b)输出
TypeError: Input ‘y’ of ‘Add’ Op has type int32 that does not match type float32 of argument ‘x’.
运行模型-会话
会话拥有并管理TensorFlow程序运行时的所有资源,张量只不过是定义计算方式,如果要让计算方式运行,需要TensorFlow的会话来执行。使用如下:
import tensorflow as tf
a = tf.constant([[1.0,2],[1.0,2],[1.0,2]], name='a')
b = tf.constant([[1.0,2],[1.0,2],[1.0,2]], name='b')
sess = tf.Session()
result = sess.run(a+b)
print(result)
sess.close()
# 输出
[[2. 4.]
[2. 4.]
[2. 4.]]
由于[1.0,2]的1.0和2是不同的数据类型,前者是浮点型,后者是整型,因此TensorFlow将计算结果皆以浮点型表示。除了这种方式,还可以使用python的with模块实现,这样不用调用sess.close()关闭会话。
我们知道张量和变量是存在于计算图里,不同的计算图需要创建相应的会话执行,在创建会话的时候,若无指定的计算图,则在默认的计算图里创建会话。如下所示:
import tensorflow as tf
# 定义g1计算图
g1 = tf.Graph()
with g1.as_default():
a = tf.constant([[1.0,2],[1.0,2],[1.0,2]], name='a')
b = tf.constant([[1.0,2],[1.0,2],[1.0,2]], name='b')
# 在g1计算图里创建会话
with tf.Session(graph=g1) as sess:
# 下面的两者均可计算a+b
print((a+b).eval())
print(sess.run(a+b))
# 输出:
# 第一次print
[[2. 4.]
[2. 4.]
[2. 4.]]
# 第二次print
[[2. 4.]
[2. 4.]
[2. 4.]]
在创建会话的时候,我们可以通过ConfigProto来设置会话,如下所示:
import tensorflow as tf
config = tf.ConfigProto(allow_soft_placement=True,
log_device_placement=True, )
c = tf.constant([[1.0, 2], [1.0, 2], [1.0, 2]], name='c')
d = tf.constant([[1.0, 2], [1.0, 2], [1.0, 2]], name='d')
with tf.Session(config=config) as sess:
# 下面的两者均可计算c+d
print((c + d).eval())
print(sess.run(c + d))
allow_soft_placement是将GPU的运算放到CPU上运算。 log_device_placement是设置日志功能。
还没有评论,来说两句吧...