TensorFlow 入门:Session、Variable、placeholder

TensorFlow入门-Session、Variable、placeholder

Tensorflow 是谷歌2015年11月正式开源的计算框架。主要依赖Protocol Buffer和Bzael两个工具包:

  • Protocl Buffer是谷歌开发的结构化数据处理工具
  • Bzael 是谷歌的自动化构建工具,谷歌内部大部分应用均通过它来编译

Tensorflow 是谷歌2015年11月正式开源的计算框架。主要依赖Protocol Buffer和Bzael两个工具包:

  • Protocl Buffer是谷歌开发的结构化数据处理工具
  • Bzael 是谷歌的自动化构建工具,谷歌内部大部分应用均通过它来编译

Tensorflow的名字已经说明其最重要的两个概念:

  • Tensor就是张量,即多维数组,所有数据都通过张量的形式表示。一个张量主要保存三个属性:名字(name),维度(shape)和类型。
  • Flow就是流,体现了计算模型,Tensorflow中每个计算都是计算图上的一个节点,节点之间的边描述了计算间的依赖关系

Tensorflow支持14种不同类型,主要包括:

  • 实数(tf.float32, tf.float64)
  • 整数(tf.int8, tf.int16, tf.int32, tf.int64, tf.unit8)
  • 布尔型(tf.bool)
  • 复数(tf.complex64, tf.complex128)

1. 会话

Tensorflow使用会话(Session)执行定义好的运算,会话拥有并管理Tensorflow程序运行时的所有资源,计算完成后需要关闭会话回收资源。
为解决异常退出时的资源释放问题,Tensorflow通过Python上下文管理器来使用会话(将所有计算放在with内部),当上下文管理器退出时自动释放所有资源。

x = tf.constant([[1.0,2.0]])   #x(1,2)
w = tf.constant([[3.0],[4.0]]) #w(2,1)
y = tf.matmul(x,w)             #y(1,1)
with tf.Session() as sess:
    print(sess.run(y))

2. 变量

Tensorflow支持14种不同类型,主要包括:

  • 实数(tf.float32, tf.float64)
  • 整数(tf.int8, tf.int16, tf.int32, tf.int64, tf.unit8)
  • 布尔型(tf.bool)
  • 复数(tf.complex64, tf.complex128)

tf.Variable(<initial-value>, name=<optional-name>) 用于生成一个初始值为initial-value(必须指定)的变量
tf.get_variable(name, shape=None, dtype=tf.float32, initializer=None) 获取已存在的变量(要求不仅名字,而且初始化方法等各个参数都一样),若不存在,就新建一个(可以用各种初始化方法,如xavier_initializer不用明确指定值)。

常用的生成随机数/数组的函数有:

  • tf.random_normal():生成正态分布随机数
  • tf.truncated_normal():生成去掉过大偏离点的正态分布随机数
  • tf.random_uniform():生成均匀分布随机数
  • tf.zeros:表示生成全0数组
  • tf.ones :表示生成全1数组
  • tf.fill :表示生成全定值数组
  • tf.constant:表示生成直接给定值的数组

例:

扫描二维码关注公众号,回复: 11346541 查看本文章
  • tf.Variable(tf.random_normal([2,3],stddev=2, mean=0, seed=1)),表示生成正态分布随机数,形状两行三列,标准差是2,均值是0,随机种子是1
  • tf.Variable(tf.Truncated_normal([2,3],stddev=2, mean=0, seed=1)),表示去掉偏离过大的正态分布, 也就是如果随机出来的数据偏离平均值超过两个标准差,这个数据将重新生成
  • random_uniform(shape=7,minval=0,maxval=1,dtype=tf.int32, seed=1),表示从一个均匀分布[minval maxval)中随机采样,注意定义域是左闭右开,即
    包含minval,不包含 maxval
  • tf.zeros([3,2],int32)表示生成[[0,0],[0,0],[0,0]]
  • tf.ones([3,2],int32)表示生成[[1,1],[1,1],[1,1]
  • tf.fill([3,2],6)表示生成[[6,6],[6,6],[6,6]]
  • tf.constant([3,2,1])表示生成[3,2,1]。

3. placeholder

Tensorflow通过placeholder占位符机制用于提供输入数据,相当于定义一个位置,这个位置中的数据在程序运行时再指定。在定义时需要指定数据类型(不可改变)。这样在程序中就不需要生成大量常量来提供输入数据,而只需要将数据通过placeholder传入Tensorflow计算图。

#使用占位符 一次输入一组数据
x = tf.placeholder(tf.float32,shape=(1,2))
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2 = tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init_op)
    print(sess.run(y,feed_dict={x:[[0.7,0.5]]}))

#使用占位符 一次输入多组数据
x = tf.placeholder(tf.float32,shape=(None,2))
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2 = tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init_op)
    print(sess.run(y,feed_dict={x:[[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]}))
    print(sess.run(w1))
    print(sess.run(w2)) 

猜你喜欢

转载自blog.csdn.net/apr15/article/details/106244082
今日推荐