Tensorflow学习笔记(二):常量(tf.constant)与变量(tf.Varialbe)

1. 生成tensor的一些方法

1.1 生成constant(常量)

  • 生成全0数组
# 语法:

tf.zeros(shape, dtype, name)

# 样例:

tf.zeros([2, 3], int32)     # ==> [[0, 0, 0], [0, 0, 0]]
  • 生成一个与给定tensor类型、形状一致的常量,其所有元素为0
# 语法:

tf.zeros_like(tensor, dtype, name)

# 样例

a = tf.constant([[1, 2, 3], [4, 5, 6]] )

tf.zeros_like(a)           # ==> [[0, 0, 0], [0, 0, 0]]
  • 生成全1数组
# 语法:

tf.ones(shape, dtype, name)

# 样例:

tf.ones([2, 3], int32)    # ==> [[1, 1, 1], [1, 1, 1]]
  • 生成一个与给定tensor类型、形状一致的常量,其所有元素为1
# 语法:

tf.ones_like(tensor, dtype, name)

# 样例:

a = tf.constant([[1, 2, 3], [4, 5, 6]])

tf.ones_like(a)   # ==> [[1, 1, 1], [1, 1, 1]]
  • 生成一个给定值的常量
# 语法:

tf.constant(value, dtype, shape, name)

# 样例:

a = tf.constant([[1, 2, 3], [4, 5, 6]], int32) 

# ==> [[1, 2, 3], [4, 5, 6]] 
  • 生成一个全部为给定数字的数组
# 语法:

tf.fill(dims, value, name)

# 样例:

a = tf.fill([2, 3], 9)   # ==> [[9, 9, 9], [9, 9, 9]] 

1.2 生成sequence(序列)

tf.range(start, limit, delta=1, name='range')

tf.linspace(start, stop, num, name=None)

1.3 生成random number(随机数)

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

tf.random_uniform(shape, minval=0.0, maxval=1.0, dtype=tf.float32, seed=None, name=None)

tf.random_shuffle(value, seed=None, name=None)

tf.random_crop(value, size, seed=None, name=None) 

tf.multinomial(logits, num_samples, seed=None, name=None) 

tf.random_gamma(shape, alpha, beta=None, dtype=tf.float32, seed=None, name=None)

2. 变量

在TensorFlow中,变量(tf.Variable)用于保存,更新神经网络的参数张量。

2.1 变量常见的属性与方法

tf.constant是一个op(算子),而tf.Variable是一个类,用于实例化对象,然后用对象初始化多个op。变量常见的属性与方法:

x = tf.Variable()

x.initializer          # 初始化单个变量

x.value()              # 读取op

x.assign()             # 写入op

x.assign_add()         # 更多op

x.eval()               # 输出变量内容

2.2 为变量设置初始值

我们需要为TensorFlow中的变量设置初始值。

  • 通过随机数设置初始值

在神经网络中,给参数设置随机初始值最常见。

weights = tf.Variable(tf.random_normal([2, 3], stddev = 2, seed = 1))

上例会生成一个形状为2*3,元素均值为0,标准差为2的矩阵。参数seed设定随机种子,保证每次运行的结果一致。我们可以通过参数mean,指定生成矩阵的元素均值。在没有mean参数时,元素均值默认为0。

weights = tf.Variable(tf.random_normal([2, 3], mean = 1, stddev = 2))

下表列出了TensorFlow支持的随机数生成器。可参考1.3

函数名随机数分布主要参数
tf.random_normal正态分布平均值、标准差、取值类型
tf.truncated_normal正态分布,如果随机数偏离均值超过2个标准差,就重新随机平均值、标准差、取值类型
tf.random_uniform平均分布最小值、最大值、取值类型
tf.random_gammagamma分布形状参数alpha、尺度参数beta、取值类型
  • 通过常数设置初始值

在神经网络中,通常使用常数来设置偏置项(bias)初始值。

biases = tf.Variable(tf.zeros([3]))

上例生成长度为3,值为0的变量。

  • 通过其他变量设置初始值
w2 = tf.Variable(weights.initialized_value())

w3 = tf.Variable(weights.initialized_value() * 2)

w2的初始值与变量weights相同;w3的初始值是变量weights的两倍。

2.3 变量初始化

虽然在定义变量时,我们给出了变量初始化的方法,但这个方法并没有被真正运行。一个变量的值在被使用之前,这个变量的初始化过程需要被明确地调用。

  • 初始化全部变量

这个方法最简单。通过tf.global_variables_initializer函数,我们就不需要将变量一个一个初始化了。

init = tf.global_variables_initializer() 

with tf.Session() as sess:
	sess.run(init)             
  • 初始化一个变量子集

变量子集是全部变量的一个子集,由一些变量组成的list。

init_ab = tf.variables_initializer([a, b], name = "init_ab")

with tf.Session() as sess:
	sess.run(init_ab)          
  • 初始化单个变量

初始化单独一个变量。

W = tf.Variable(tf.zeros([784, 10])) 

with tf.Session() as sess:
	sess.run(W.initializer)   

3. 参考文章

《TensorFlow — 实战Geogle深度学习框架》

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页