TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。
- 使用图(graph)来表示计算任务。
- 在被称之为会话(Session)的上下文种执行图。
- 使用tensor表示数据。
- 通过变量(Variable)维护状态。
- 使用feed和fetch可以为任意的操作赋值或者从中获取数据。
Tensorflow是开源的人工智能软件库,使用图(graphs)来表示计算任务,图中的节点(nodes)称之为op(mathematical operations),一个op获得0个或多个Tensor,执行计算,产生0个或多个Tensor。边表示多维数据数组(张量)在节点之间流通,Tensor看作是一个N维的数组或列表。图必须在会话(Session)里被启动。
在一个会话中执行graph1和graph2:
下面通过程序看看tensorflow的基本使用:
import tensorflow as tf
# 创建一个常量 op
m1 = tf.constant([[3,3]])
# 创建一个常量 op
m2 = tf.constant([[2],[3]])
# 创建一个矩阵乘法op,把m1和m2传入
product = tf.matmul(m1,m2) #得到一个1X1的tensor
# 定义一个会话,启动默认图
sess = tf.Session()
# 使用sess的run方法来执行矩阵乘法op
# run(product)触发了图中3个op
result = sess.run(product)
sess.close() # output = 15
另一种定义会话的方法:
with tf.Session() as sess:
result = see.run(product)
tensorflow变量定义,变量定义后值可变而维度不可变。在神经网络中,变量一般可作为储存权重和其他信息的矩阵
x = tf.Varaible([1,2])
tensorflow占位符:占位符并没有初始值,只会分配必要的内存。在会话中,占位符可以使用 feed_dict 进行数据的feed。
feed_dict 是一个字典,在字典中需要给出每一个用到的占位符的取值。在训练神经网络时需要每次提供一个批量的训练样本,如果每次迭代选取的数据要通过常量表示,那么 TensorFlow 的计算图会非常大。因为每增加一个常量,TensorFlow 都会在计算图中增加一个结点。所以说拥有几百万次迭代的神经网络会拥有极其庞大的计算图,而占位符却可以解决这一点,它只会拥有占位符这一个结点。
在tensorflow中Everything is Tensor:
Tensor的类型:
TensorFlow Mechanics