TensorFlow常量、变量和占位符详解

 

 TensorFlow 支持以下三种类型的张量:

  1. 常量:常量是其值不能改变的张量。
  2. 变量:当一个量在会话中的值需要更新时,使用变量来表示。例如,在神经网络中,权重需要在训练期间更新,可以通过将权重声明为变量来实现。变量在使用前需要被显示初始化。另外需要注意的是,常量存储在计算图的定义中,每次加载图时都会加载相关变量。换句话说,它们是占用内存的。另一方面,变量又是分开存储的。它们可以存储在参数服务器上。
  3. 占位符:用于将值输入 TensorFlow 图中。它们可以和 feed_dict 一起使用来输入数据。在训练神经网络时,它们通常用于提供新的训练样本。在会话中运行计算图时,可以为占位符赋值。这样在构建一个计算图时不需要真正地输入数据。需要注意的是,占位符不包含任何数据,因此不需要初始化它们。

TensorFlow 常量

声明一个标量常量:

t_1 = tf.constant(4)

一个形如 [1,3] 的常量向量可以用如下代码声明:

t_2 = tf.constant([4,3,2])

要创建一个所有元素为零的张量,可以使用 tf.zeros() 函数。这个语句可以创建一个形如 [M,N] 的零元素矩阵,数据类型(dtype)可以是 int32、float32 等:

tf.zeros([M,N],tf.dtype)

例如:

zero_t = tf.zeros([2,3],tf.int32)
# Results in an 2x3 array of zeros:[[0 0 0],[0 0 0]]

创建一个所有元素都设为 1 的张量。下面的语句即创建一个形如 [M,N]、元素均为 1 的矩阵:

tf.ones([M,N],tf,dtype)

例如:

ones_t = tf.ones([2,3],tf.int32)
# Results in an 2x3 array of ones:[[1 1 1],[1 1 1]]


更进一步,还有以下语句:

    • 在一定范围内生成一个从初值到终值等差排布的序列:

      tf.linspace(start,stop,num)

      相应的值为 (stop-start)/(num-1)。例如:

      range_t = tf.linspace(2.0,5.0,5)
      #We get:[2. 2.75 3.5 4.25 5.]

    • 从开始(默认值=0)生成一个数字序列,增量为 delta(默认值=1),直到终值(但不包括终值):

      tf.range(start,limit,delta)

      下面给出实例:

      range_t = tf.range(10)
      #Result:[0 1 2 3 4 5 6 7 8 9]

    •  
posted @ 2022-05-20 08:00  青竹之下  阅读(160)  评论(0)    收藏  举报