Tensorflow知识整理(一)

Tensorflow知识整理(一)

  • TensorFlow介绍
    • Protocol Buffer: TensorFlow中用来组织数据,处理结构化数据的工具
    • Bazel: 谷歌开源的自动化构建工具
    • 张量(Tensor)
    • TensorFlow运行模型——会话
    • 变量
    • 占位符

TensorFlow介绍

  TensorFlow(一个使用计算图来表示计算任务的编程系统)
  TF中的每个计算都是计算图上的一个节点节点间的边描述了计算之间的依赖关系(一个运算的驶入依赖于另一个运算的输出)
  图中的节点被称为op,一个op获得0或多个Tensor,执行计算,产生0或多个Tensor,每个Tensor是一个类型化的多维数组。
  一个TensorFlow图描述计算过程,图必须在会话里被启动。会话将图的op分到诸如CPU或GPU之类的设备上,并且提供执行op的方法。这些方法执行后,将产生的Tensor返回。在Python语言中,返回的是numpy ndarray对象,在C/C++中,返回tensorflow::Tensor。

Protocol Buffer: TensorFlow中用来组织数据,处理结构化数据的工具

Protocol Buffer是TensorFlow自定义的数据结构。与json和xml不同的地方在于:

  1. Protocol Buffer序列化之后的数据不是字符串,而是二进制流;
  2. xml和json在反序列化的时候不需要额外信息,因为信息已经包含在序列化的数据中,而Protocol Buffer需要预先定义数据格式(schema);

综上,Protocol buffer比xml和json序列化后的数据要少,解析快。
Protocol Buffer定义数据格式:

message user{
    optional string name = 1 ; // 选填
    required int32 id = 2;    // 必填
    repeated string email = 3; // 是一个list
}

Bazel: 谷歌开源的自动化构建工具

// 暂时没有太多的了解

张量(Tensor)

  tf中的张量并不是存储的结果数据,保存的是如何得到这些数字的过程。张量主要保存了名字(name)、维度(shape)、类型(type)。
 name不仅是张量的唯一标识,并且给出了这个张量是如何计算出来的,name = “node:src_output” ,表示张量是node的第src_output个输出,node表示节点名称,src_output表示当前张量来自节点的第几个输出。
  张量的用途是:(1)对中间计算结果的引用,(2)当计算图构造完成后,张量可以用来获得计算结果,得到真实的数字。
【type】
  tf支持14种不同的类型:tf.int8,tf.in16, tf.int32, tf.int64, int.uint8, tf.bool, (复数) tf.complex64,tf.complex128

TensorFlow运行模型——会话

  会话运用并管理TensorFlow程序运行时的所有资源,所有计算完成之后需要关闭会话来帮助系统回收资源,否则可能会出现资源泄露问题。
  TensorFlow不会自动生成默认会话,需要手动指定。

变量

  tf.variable_scope(scope_name, reuse):构建一个变量的上下文环境
  所有在此上下文的变量,其变量名前面需要添加scope_name作为前缀,reuse规定在该上下文环境中的变量是否可复用,即允许取别名,变量共享。
  tf.name_scope():构建一个命名空间,对于但是只对ops起作用,对变量名(特指以tf.get_variable()定义的变量,tf.Variable()仍然起作用)不起作用

with tf.variable_scope("foo"):
	with tf.name_scope("bar"):
		v = tf.get_variable("v",[1])
		x = 1.0 + v
# v的name是"foo/v:0"
# x.op.name是"foo/bar/add"

【创建变量的两种方法】
  tf.Variables(initial_value, trainable=True, collections=None, validate_shape=True, name=None)

  tf.get_variable()

  1. 在使用变量前,需要初始化变量,用tf.global_variables_initializer()初始化所有变量。
  2. tf的变量初始化和赋值是通过Assign节点提供的。
  3. 如果声明变量时,参数trainable为true,那么这个变量会加入到graphKeys.TRAINABLE_VARIABLES集合中。
  4. 变量的类型是不可变的,但维度是可变的(validate_shape = False)

【初始化变量】

  1. 随机数生成函数
函数 分布 参数
tf.random normal 正态分布 平均值 、 标准差、取值类型
tf.truncated normal 正态分布的随机值,如果随机出来的值偏离平均值超过 2个标准差,那么这个数将会被重新随机 平均值、标准差、取值类型
tf.random uniform 均匀分布 最小 、最大取值 , 取值类型
tf.random_gamma Gamma分布 形状参数 alpha、尺度参数 beta 、 取值类型
  1. 常数生成函数
函数 功能
tf.zeros 产生全 0 的数组
tf.ones 产生全 l 的数组
tf.fill 产生一个全部为给定数字的数组
tf.constant 产生一个给定值的常量
  1. 初始化器
初始化函数 功能 主要参数
tf.constant_initializer 将变量初始化为给定常量 常量的取值
tf.random_normal_initializer 将变量初始化满足正态分布的随机值 正态分布的均值和标准差
tf.truncated_normal_initializer 将变量初始化满足正态分布的随机值,如果随机出来的值偏离平均值超过 2个标准差,那么这个数将会被重新随机 正态分布的均值和标准差
tf.random_uniform_initializer 将变量初始化为满足均匀分布的随机值 最大、最小值
tf.uniform_unit_scaling_initializer 将变量初始化为满足均匀分布但不影响输出数量级的随机值 factor
tf.zeros_initializer 将变量设置为全0 变量维度
tf.ones_initializer 将变量设置为全1 变量维度

【注意】
(1)tf.get_variable() 和tf.Variable()的区别:

  • tf.get_variable()在创建变量时,需要指定参数名,因为tf.get_variable()需要检查变量名是否已存在,存在则报错,如果是变量复用,需要使用tf.variable_scope构建上下文环境 。
  • tf.Variable()不一定要指定名称,tf会自动在冲突的变量名上添加标记区别。

占位符

  使用tf.placeholder()来定义一个位置,这个位置的数据将在程序运行时再指定。

你可能感兴趣的:(Tensorflow)