tensorflow实践(二) 基本原理学习和框架使用

Tensorflow 是google大脑小组的工程师们开发的用于机器学习和深度神经网络方面的研究,它通过一个数据流图来进行计算。[本文是对Tensorflow社区资料进行学习和实践,其中文社区还是很好的学习资源]


        一、基本概念:

        1、 数据流程图  data flow graphs

         它的数据流图如下图所示(来源于网络):

         2、 节点【nodes】: 图中的各种形状的方块,表示的是某种数学操作【op】

         3、  线【edges】: 表示节点间相互联系的多维数据数组,在tensorflow中,称为 张量【tensor】。个人理解为数学中的向量矩阵如:

                三个元素的一维向量  [ 1, 2, 3 ],   2x2 的二维向量  [ [ 1, 1],[1, 1 ] ]

         4、  重塑节点【Reshape】:前面说了 节点表示计算, 所以reshape是一个计算节点,用于进行矩阵的行数、列数、维度的调整。经常用这个节点进行降低维度计算

         5、  激活函数层【ReLULayer】:实现了对输入数据的非负处理,将小于零的数据进行了截断。

         6、  逻辑层【Logit layer】: 实现逻辑回归,实现分类器计算

         7、  计算梯度【Gradients】:计算梯度

         8、  梯度下降训练【SGD Trains】:进行梯度下降训练优化

    二、tensorflow的基本使用

        一般来说,tensorflow使用图(graph)来表示计算任务,在会话 (Session) 的上下文 (context) 中执行图 ;使用tensor 表示数据,变量 (Variable)记录计算状态;使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据;

import tensorflow as tf

# 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点
# 加到默认图中.
#
# 构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])

# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])

# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.
# 返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)

#Session 对象在使用完后需要关闭以释放资源. 除了显式调用 close 外, 也可以使用 "with" 代码块 来自动完成关闭动作.
#注意下面第二句和第三局的缩进
with tf.Session() as sess:
  result = sess.run([product])
  print result


下面看看执行结果



   1、变量

变量的使用,需要通过初始化加入到图中

import tensorflow as tf

# 创建一个变量, 初始化为标量 0.
count = tf.Variable(0, name="counter")

# 创建一个 op, 其作用是使 count 增加 1
one = tf.constant(1)
new_value = tf.add(count, one)
update = tf.assign(count, new_value)

# 启动图后, 变量必须先经过初始化,
# 首先必须增加一个`初始化` op 到图中.
init_op = tf.initialize_all_variables()

# 启动图, 运行 op
with tf.Session() as sess:
  # 运行 'init' op
  result = sess.run(init_op)
  print sess.run(count)
  # 运行 op, 更新count值 
  sess.run(update)
  print sess.run(count)

执行结果如下


之所以会多打印一个1,是因为 tf.assign( oldValue, newValue) 函数会打印

    2) Fetch  拿取、获取

可以一次传入多个tensor 获取结果

import tensorflow as tf

#定义两个常量
x = tf.constant(3)
y = tf.constant(4)

# 创建3个 op,计算x平方和y平方和
xx = tf.mul(x, x)
yy = tf.mul(y, y)
zz = tf.add(xx, yy)


# 启动图, 运行 op
with tf.Session() as sess:
  result = sess.run([xx, yy, zz])
  print result

 执行结果 不因为 sess.run([xx,yy,zz]) 中间的tensor 顺序而改变结果


     3) feed

     tensorflow提供了占位符和feed填入的机制,对于计算中的参数(预先用占位符定义),通过feed_dict的方式进行代入实际计算值的方法    

import tensorflow as tf

#定义两个常量
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)

# 创建3个 op,计算x平方和y平方和
xx = tf.mul(x, x)
yy = tf.mul(y, y)
zz = tf.add(xx, yy)


# 启动图, 运行 op
with tf.Session() as sess:
  result = sess.run([xx, yy, zz], feed_dict={x:[3.], y:[4.]} )
  print result

  计算结果如下:




猜你喜欢

转载自blog.csdn.net/csolo/article/details/78788631
今日推荐