TensorFlow学习笔记1-入门
作者: YunYuan
写在前面
本笔记是我学习TensorFlow官方文档中文版的读书笔记,由于尚未搭建好Github的个人博客的评论功能,故尚不方便与各位交流。如有问题,可邮箱联系。
TensorFlow运算的本质是有状态的数据流式图。TensorFlow的直译是“流动的张量”。
特点:计算模型简洁灵活,计算性能显著提升,支持更多的异构计算系统。
一些概念:
- 有向图(计算图):由节点(node)和边(edge)组成。节点表示运算操作,节点与节点之间的是边。整个计算图描述了计算流程。
- 节点:表示运算操作,每个节点可以有任意多的输入和任意多的输出。
- 边:在边中流动(flow)的是张量(tensor)。
- 有一种特殊的边没有数据流动,这种边是依赖控制。作用是让它的起始节点执行完再执行目标节点,从而进行控制。
简单的有向图示例如图:
其代码表示为:
import tensorflow as tf
b=tf.Variable(tf.zeros([100])) # 生成100维的向量,初始化为0
W=tf.Variable(tf.random_uniform([784,100],-1,1)) # 生成784x100的随机矩阵W
x=tf.placeholder(name="x") # 输入的Placeholder
relu=tf.nn.relu(tf.matmul(W, x)+b) # ReLU(Wx+b)
C=[...] # 根据ReLU函数的结果计算Cost
s=tf.Session()
for step in range(0, 10):
input=...construct 100-D input array... # 为输入创建一个100维的向量
result=s.run(C, feed_dict={x: input}) # 获取Cost,供给输入x
print(step, result)
在代码中,Variable
表示参量,即你要训练的参数,而Placeholder
表示输入数据,即训练集。
TensorFlow内建运算操作
- 标量运算:Add、Sub、Mul、Div、Exp、Log、Greater、Less、Equal
- 向量运算:Concat、Slice、Split、Constant、Rank、Shape、Shuffle
- 矩阵运算:MatMul、MatrixInverse、MatrixDeterminant
- 带状态的运算:Variable、Assign、AssignAdd
- 神经网络组件:SoftMax、Sigmoid、ReLU、Convolution2D、MaxPooling
- 存储、恢复:Save、Restore
- 队列及同步运算:Enqueue、Dequeue、MutexAcquire、MutexRelease
- 控制流:Merge、Switch、Enter、Leave、NextIteration
更进一步
sess.run()
函数里的参数通常有两种:
-
一种是tensor,将
feed_dict
中的数据送进计算图中计算一次,并取出tensor -
另一种是
train=optimizer.minimize(loss)
,即训练动作(对loss进行优化),每执行一次sess.run(train)会优化一次。
参考资料
- TensorFlow官方文档中文版
- 黄文坚 唐源, TensorDlow实战 , 201703, 电子工业出版社