# 语法:
tf.zeros(shape, dtype, name)
# 样例:
tf.zeros([2, 3], int32) # ==> [[0, 0, 0], [0, 0, 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]]
# 语法:
tf.ones(shape, dtype, name)
# 样例:
tf.ones([2, 3], int32) # ==> [[1, 1, 1], [1, 1, 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]]
tf.range(start, limit, delta=1, name='range')
tf.linspace(start, stop, num, name=None)
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)
在TensorFlow中,变量(tf.Variable)用于保存,更新神经网络的参数张量。
tf.constant是一个op(算子),而tf.Variable是一个类,用于实例化对象,然后用对象初始化多个op。变量常见的属性与方法:
x = tf.Variable()
x.initializer # 初始化单个变量
x.value() # 读取op
x.assign() # 写入op
x.assign_add() # 更多op
x.eval() # 输出变量内容
我们需要为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_gamma | gamma分布 | 形状参数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的两倍。
虽然在定义变量时,我们给出了变量初始化的方法,但这个方法并没有被真正运行。一个变量的值在被使用之前,这个变量的初始化过程需要被明确地调用。
这个方法最简单。通过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)
《TensorFlow — 实战Geogle深度学习框架》