tensorflow学习笔记(2):常量(tf.constant)与变量(tf.Varialbe)

来源:互联网 发布:小学考试软件下载 编辑:程序博客网 时间:2024/05/22 13:29

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()              # 读取opx.assign()             # 写入opx.assign_add()         # 更多opx.eval()               # 输出变量内容


2.2 为变量设置初始值

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

2.2.1 通过随机数设置初始值

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

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_gamma gamma分布 形状参数alpha、尺度参数beta、取值类型

2.2.2 通过常数设置初始值

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

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

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

2.2.3 通过其他变量设置初始值

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

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

2.3 变量初始化

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

2.3.1初始化全部变量

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

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

2.3.2 初始化一个变量子集

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

init_ab = tf.variables_initializer([a, b], name = "init_ab")with tf.Session() as sess:    sess.run(init_ab)          

2.3.3 初始化单个变量

初始化单独一个变量。

W = tf.Variable(tf.zeros([784, 10])) with tf.Session() as sess:    sess.run(W.initializer)   

参考文章

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

阅读全文
0 0