浅笑の博客

我们的征途是星辰大海


  • 首页

  • 标签29

  • 分类6

  • 归档47

  • 留言板

  • 搜索

TensorFlow学习笔记1:张量与变量

发表于 2019-08-06 分类于 深度学习 , Python Valine: 本文字数: 3.3k

张量的概念

TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通.零阶张量表示标量,一阶张量表示向量,也就是一个以为数组,第n阶张量为矩阵,也就是一个n维数组。
但张量在tf中并不是采用数组的形式,只是对TF的运算结果的引用。

一个张量包含三个属性:名字name ,维度shape,类型 dtype:

  • name:张量的唯一标识。命名规范:“node:src_input” 。node 表示图的节点的名称,src_input 表示张量来自节点的第几个输入(从0开始)
  • shape:描述张量的维度信息。
  • dtype:每一个张量有一个唯一的类型。不同类型计算会报错。

生成张量

  • 创建固定值张量
    tf.constant(value, dtype=None, shape=None, name=’Const’) 创建一个常数张量
    tf.zeros(shape, dtype=tf.float32, name=None) 创建所有元素设置为零的张量。此操作返回一个dtype具有形状shape和所有元素设置为零的类型的张量。
    tf.ones(shape, dtype=tf.float32, name=None) 创建一个所有元素设置为1的张量。此操作返回一个类型的张量,dtype形状shape和所有元素设置为1。
    tf.fill(dims, value, name=None) 创建一个填充了标量值的张量。此操作创建一个张量的形状dims并填充它value。
  • 创建相似形状的张量
    tf.zeros_like(tensor, dtype=None, name=None) 给tensor定单张量(),此操作返回tensor与所有元素设置为零相同的类型和形状的张量。
    tf.ones_like(tensor, dtype=None, name=None) 给tensor定单张量(),此操作返回tensor与所有元素设置为1 相同的类型和形状的张量。

  • 创建随机张量
    tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) 从截断的正态分布中输出随机值,和 tf.random_normal() 一样,但是所有数字都不超过两个标准差
    tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) 从正态分布中输出随机值,由随机正态分布的数字组成的矩阵
    randunif_ts=tf.random_uniform(shape,minval=0,maxval=1) 生成均匀分布的随机数,结果返回从minval(包含)到maxval(不包含)的均匀分布的随机数

变量

tf.Variable.init(initial_value, trainable=True, collections=None, validate_shape=True, name=None)

  • initial_value:A Tensor或Python对象可转换为a Tensor.变量的初始值.必须具有指定的形状,除非 validate_shape设置为False.
  • trainable:如果True,默认值也将该变量添加到图形集合GraphKeys.TRAINABLE_VARIABLES,该集合用作Optimizer类要使用的变量的默认列表
  • collections:图表集合键列表,新变量添加到这些集合中.默认为[GraphKeys.VARIABLES]
  • validate_shape:如果False允许使用未知形状的值初始化变量,如果True,默认形状initial_value必须提供.
  • name:变量的可选名称,默认’Variable’并自动获取

变量的创建

1
2
3
x = tf.Variable(5.0,name="x")
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")

调用tf.Variable()向图中添加了几个操作:

  • 一个variable op保存变量值。
  • 初始化器op将变量设置为其初始值。这实际上是一个tf.assign操作。
  • 初始值的ops,例如 示例中biases变量的zeros op 也被添加到图中。

变量的初始化

变量的初始化必须在模型的其它操作运行之前先明确地完成。最简单的方法就是添加一个给所有变量初始化的操作,并在使用模型之前首先运行那个操作。最常见的初始化模式是使用便利函数 initialize_all_variables()将Op添加到初始化所有变量的图形中。

1
2
3
4
init_op = tf.global_variables_initializer()

with tf.Session() as sess:
sess.run(init_op)

通过另一个变量赋值

你有时候会需要用另一个变量的初始化值给当前变量初始化,由于tf.global_variables_initializer()初始化所有变量,所以需要注意这个方法的使用。
就是将已初始化的变量的值赋值给另一个新变量!

1
2
3
4
5
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")

w2 = tf.Variable(weights.initialized_value(), name="w2")

w_twice = tf.Variable(weights.initialized_value() * 0.2, name="w_twice")

变量的属性

  • name
    返回变量的名字

  • op
    返回变量所有的的op操作

变量的方法

  • assign
    为变量分配一个新值

    1
    2
    x = tf.Variable(5.0,name="x")
    w.assign(w + 1.0)
  • eval
    在会话中,计算并返回此变量的值(必须要在初始化后)。这不是一个图形构造方法,它不会向图形添加操作。方便打印结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    v = tf.Variable([1, 2])
    init = tf.global_variables_initializer()

    with tf.Session() as sess:
    sess.run(init)

    # 指定会话
    print(v.eval(sess))
    # 使用默认会话
    print(v.eval())

管理图中的变量

  • tf.global_variables()
    返回图中收集的所有变量

占位符

占位符和变量是使用TensorFlow计算图的关键工具,两者是有区别的

  • 变量 是TensorFlow算法中的参数,通过调整这些变量的状态来优化模型算法;
  • 占位符 是TensorFlow对象,用于表示输入输出数据的格式,允许传入指定类型和形状的数据。

创建占位符

占位符仅仅是声明数据位置,也即先占个位,后面在会话中通过feed_dict传入具体的数据。示例代码如下:

1
2
3
4
a=tf.placeholder(tf.float32,shape=[1,2])
b=tf.placeholder(tf.float32,shape=[1,2])
adder_node=a+b #这里的“+”是tf.add(a,b)的简洁表达
print(sess.run(adder_node,feed_dict={a:[2,4],b:[5.2,8]}))

TensorFlow
论文阅读笔记9:Scale-Aware Trident Networks for Object Detection
TensorFlow学习笔记2:图(Graph)与会话(Session)机制
Zheng Yujie

Zheng Yujie

C++/Python/深度学习
47 日志
6 分类
29 标签
目录
  1. 1. 张量的概念
    1. 1.1. 生成张量
  2. 2. 变量
    1. 2.1. 变量的创建
    2. 2.2. 变量的初始化
    3. 2.3. 通过另一个变量赋值
    4. 2.4. 变量的属性
    5. 2.5. 变量的方法
    6. 2.6. 管理图中的变量
  3. 3. 占位符
    1. 3.1. 创建占位符
© 2019 Zheng Yujie | 全站共199k字
浙ICP备 - 19035016号
0%