TensorFlow
文章目录
一.编程模型
一个 TensorFlow 程序的执行过程可分为三个阶段;
- 创建计算图
- ,运行一个会话,以完成计算图中的定义的操作
- 输出数据集合和分析
import tensorflow as tf
with tf.Session() as session:
x=tf.placeholder(tf.float32,[1],name='x')
y=tf.placeholder(tf.float32,[1],name='y')
z=tf.constant(1.0)
y=x*z
x_in=[100]
y_output=session.run([y],{x:x_in})
print(y_output)
二.数据模型
由张量表示,是一个多维数值阵列
这种数据结构 由三个参数描述:
- 阶
- 形状
- 类型
2.1 阶(rank)
定义了张量的维数,也称作是一个张量的量级或张量的n个维
scalar=tf.constant(100)
vector=tf.constant([1,2,3,4,5])
matrix=tf.constant([[1,2,3],[4,5,6]])
cube_matrix=tf.constant([[[1],[2]],[[4],[5]]])
print(vector.get_shape())
2.2 形状
指的是行数,和列数`
如
vector.get_shape()
2.3 数据类型
tensor_ld=np.array([1,2,3,4,5,6,7,8])
tensor_ld=tf.constant(tensor_ld)#用常数构建张量
tensor_2d=tf.Variable(tensor_2d)#用变量构建张量
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(tensor_2d.get_shape())
print(sess.run(tensor_2d))
为方便程序在python 交互环境下的使用,可以采用 InteractiveSession类,并在所有Tensor.eval(),和 Operation.run() 调用中使用该类
interactive_session=tf.InteractiveSession()
tensor=np.array([1,2,3,4,5])
tensor=tf.constant(tensor)
print(tensor.eval())
interactive_session.close()
这个类为交互情境下(如 shell,IPython Notebook)的使用提供了方便--------编写代码时无需不停的传递Session对象
TensorFlow 另一种定义张量的方式,使用tf.convert_to_tensor 命令
tensor_3d=np.array([[[0,1,2],[3,4,5]],[[4,5,6],[5,6,7]],[[8,9,10],[2,3,4]]])
tensor_3d=tf.convert_to_tensor(tensor_3d,dtype=tf.float64)
with tf.Session() as sees:
print(tensor_3d.get_shape())
print (sess.run(tensor_3d))
2.4变量
是承载和更新参数的对象,变量必须初始化,当然你也可以保存或恢复变量,用于代码分析
import tensorflow as tf
value=tf.Variable(0,name='value')
one=tf.constant(1)
new_value=tf.add(value,one)
updata_value=tf.assign(value,new_value)
initializer=tf.global_variables_initializer()
#将计算图实例化
with tf.Session() as sess:
sess.run(initializer)
print(sess.run(value))
for _ in range(10):
sess.run(updata_value)
print(sess.run(value))
张量对象是指向操作结果的一个指针,并非真有含有操作的输出值
2.5 取回
调用 Session对象中的run() 函数,并传入需要取回的张量。除了取回单一的张量,也可以取回多个张量
constant_A=tf.constant([100.0])
constant_B=tf.constant([200.0])
constant_C=tf.constant([3.0])
sum_=tf.add(constant_A,constant_B)
mul_=tf.multiply(constant_B,constant_C)
with tf.Session() as sess:
result=sess.run([sum_,mul_])
print(result)
2.6 注入
注入机制 将张量插入图结点,它用一个张量值暂时替代操作的输出。注入机制只用于在调用run 函数时,通过 feed_dict 传递参数,最常见的是用tf.placeholder() 创建feed操作,并继承其他特定操作作为注入操作。
a=3
b=2
x=tf.placeholder(tf.float32,shape=(a,b))
y=tf.add(x,x)
data=np.random.rand(a,b)
sess=tf.Session()
result=sess.run(y,feed_dict={x:data})
print(result)
3. TensorBoard
训练神经网络时,有时需要监控网络的参数,一般是节点的输入与输出。这样既可在每次训练迭代后检查误差函数是否最小化,从而了解你的模型是否正确学习。
针对 Windows 系统下的 TensorBoard 安装
- pip install tensorboard
不过,Tensorflow 提供了TensorBoard 框架,用于分析和调试神经网络模型。TensorBoard 采用所谓的汇总来查看模型的参数;一旦Tensorflow 代码执行,我们就可以调用TensorBoard的 图形用户界面 来查看汇总数据。
此外,TensorBoard 还可以 显示并学习TensorFlow的计算图。一个深度神经网络模型的计算图往往会非常复杂。
3.1 TensorBoard 工作方式
TensorBoard 的主要思想是将所谓的汇总和节点(操作)联系起来。
运行时,汇总操作将数据输入对应的节点,并进行运算;将输出数据写入一个文件,供TensorBoard 读取。
然后启动TensorBoard,并将已汇总的操作可视化。
TensorBoard的工作流如下:
- 编译你的计算图/代码
- 添加汇总op到你需要分析的节点上;
- 照常运行你的计算图;
- 同时附带运行汇总op;
- 代码运行完成后,启动TensorBoard ;
- 可视化汇总输出
3.2实现一个单输入神经元
(图片来自网络)
该神经元的输出就是输入与对应权重的乘积
input_value=tf.constant(0.5,name="input_value")
weight=tf.Variable(1.0,name="weight")
expected_output=tf.constant(0.0,name="expected_output")
model=tf.multiply(input_value,weight,"model")
loss_function=tf.pow(expected_output-model,2,name="loss_function")
optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.025).minimize(loss_function)
for value in [input_value,weight,expected_output,model,loss_function]:
tf.summary.scalar(value.op.name,value)
summaries=tf.summary.merge_all()
sess=tf.Session()
summary_writer=tf.summary.FileWriter('log_simple_stats',sess.graph)
sess.run(tf.global_variables_initializer())
for i in range(100):
summary_writer.add_summary(sess.run(summaries),i)
sess.run(optimizer)
小结:
核心概念:
- 图
- 操作
- 张量
- 会话
同时我们还介绍了TensorBoard ,它是分析和调试神经网络模型的一个有力工具
下一篇博客我们将着重介绍 如何用Tensorflow 构建前馈神经网络