TensorFlow 深度学习 实践(2)

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 构建前馈神经网络

猜你喜欢

转载自blog.csdn.net/DFCED/article/details/104931109