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自定义的数据结构。与json和xml不同的地方在于:
综上,Protocol buffer比xml和json序列化后的数据要少,解析快。
Protocol Buffer定义数据格式:
message user{
optional string name = 1 ; // 选填
required int32 id = 2; // 必填
repeated string email = 3; // 是一个list
}
// 暂时没有太多的了解
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不会自动生成默认会话,需要手动指定。
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()
【初始化变量】
函数 | 分布 | 参数 |
---|---|---|
tf.random normal | 正态分布 | 平均值 、 标准差、取值类型 |
tf.truncated normal | 正态分布的随机值,如果随机出来的值偏离平均值超过 2个标准差,那么这个数将会被重新随机 | 平均值、标准差、取值类型 |
tf.random uniform | 均匀分布 | 最小 、最大取值 , 取值类型 |
tf.random_gamma | Gamma分布 | 形状参数 alpha、尺度参数 beta 、 取值类型 |
函数 | 功能 |
---|---|
tf.zeros | 产生全 0 的数组 |
tf.ones | 产生全 l 的数组 |
tf.fill | 产生一个全部为给定数字的数组 |
tf.constant | 产生一个给定值的常量 |
初始化函数 | 功能 | 主要参数 |
---|---|---|
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.placeholder()来定义一个位置,这个位置的数据将在程序运行时再指定。