(二)TensorFlow常量、变量、占位符及op详解

(二)TensorFlow常量、变量、占位符及op详解

TensorFLow提供了一个库来定义和执行对张量的各种数学运算。张量可理解为一个n维矩阵,所有类型的数据,包括标量、矢量、和矩阵等都是特殊类型的张量。

数据的类型 张量 形状
标量 0维张量 []
向量 1维张量 [D0]
矩阵 2维张量 [D0,D1]
张量 N维张量 [D0,D1…Dn-1]
TensorFlow支持以下三种类型的张量:

一、TensorFlow常量

常量是值不能改变的张量。

  1. 声明标量、向量、矩阵的常量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #1.声明一个标量常量:
    t_1 = tf.constant(4)

    #2.声明一个向量常量:
    t_2 = tf.constant([4,3,2])

    #3.声明一个2*3的零矩阵常量、全1矩阵常量(第二个参数表示类型):
    zero_t = tf.zeros([2,3],tf.int32)
    ones_t = tf.ones([2,3],tf.int32)

    #4.创建一个与现有Numpy数组或张量常量具有相同形状的张量常量
    t_3 = tf.zeros_like(t_2)
    t_4 = tf.ones_like(t_2)

    #5.声明一个在一定范围内等差排列的序列
    t_5 = tf.linspace(start,stop,num)
    t_6 = tf.range(start,limit,delta)

  2. 创建随机张量
    TensorFlow允许创建具有不同分布的随机张量:

    1
    2
    3
    4
    5
    6
    7
    8
    #1.创建标准正态随机分布(mean表示均值,stddev表示标准差)
    t_random = tf.random_normal([2,3],mean=2.0,stddev=4,seed=None)

    #2.创建正态随机分布
    t_random = tf.truncated_normal([2,3],mean=2.0,stddev=2,seed=None)

    #3.创建均匀随机分布
    t_random = tf.random_uniform([2,3],minval=0..0,maxval=1.0,seed=None)


    如果t_random是要将给定的[3,6]张量随机剪裁为[2,5]大小:

    1
    tf.random_crop(t_random, [2,5], seed=None)

二、TensorFlow变量

Variable变量通常在神经网络中表示权重和偏置。

  • Variable是TensorFlow下可以修改的张量,需要定义一个初始值,初始值可以是数值、列表、numpy矩阵,也可以直接是张量。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #1.使用常量定义
    var_a = tf.Variable(3, dtype=tf.int32)
    var_b = tf.Variable([1,2], dtype=tf.float32)
    var_c = tf.Variable(tf.zeros([1024,10]))

    #2.使用另一个张量定义
    rand_t = tf.random_uniform([50,50], mean=0, stddev=10, seed=0)
    t_a = tf.Variable(rand_t)
    t_b = tf.Variable(rand_t)
  • 在使用Variable时,必须初始化变量,也就是调用它们的初始化方法。调用初始化的方法可以全局调用,也可以初始化某些变量:

  • Variable变量可以通过assign赋值,赋值的过程是一个op,也是需要执行才会产生效果:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import tensorflow as tf

    var_a = tf.Variable(3, dtype=tf.int32)
    #变量重新赋值
    assign_op = var_a.assign(5)

    #变量初始化
    init = tf.global_variables_initializer()
    #开启一个会话
    with tf.Session() as sess:
    #执行变量初始化op
    sess.run(init)
    #执行赋值op
    sess.run(assign_op)
    #输出赋值后新的结果
    print(sess.run(var_a))

三、TensorFlow占位符

TensorFlow允许通过tf.placeholder(dtype,shape=None,name=None)在构建图的时候占据一个位置,然后等到执行图的时候再带入具体的值。
占据一个位置:

执行图时赋值:

1
2
3
4
5
6
7
8
9
import tensorflow as tf

x = tf.placeholder(dtype=tf.float32)
y = 2 * x
data = tf.random_uniform(shape=[4,5], minval=0.0, maxval=10)

#开启一个会话 with tf.Session() as sess:
x_data = sess.run(data)
print(sess.run(y, feed_dict={x: x_data}))

(需要注意的是,所有常量、变量和占位符将在代码的构建图部分中定义。如果在定义部分使用 print 语句,只会得到有关张量类型的信息,而不是它的值。为了得到相关的值,需要创建会话图并对需要提取的张量显式使用运行命令)

四、op

TensorFlow的基本操作定义为op,以下是常见的op:

矩阵的reshape在数据处理方面经常用到:

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×