【问题标题】:TensorFlow and random variablesTensorFlow 和随机变量
【发布时间】:2017-10-07 19:21:56
【问题描述】:
我有一个关于 TensorFlow 中随机变量的问题。假设我的损失函数中需要一个随机变量。
在 TensorFlow 教程中,我发现用于初始化变量的随机函数,例如在第二次通过训练过程修改的权重。
在我的情况下,我需要一个随机的浮点向量(比如说 128 个值),它遵循特定的分布(均匀或高斯),但在每次损失计算中都会发生变化。
在我的损失函数中定义这个变量,这是我需要做的简单的事情,因为在每个时期我都会得到新的值(无论如何都遵循选定的分布)或者我得到的值总是相同的在所有的迭代中?
【问题讨论】:
标签:
variables
random
tensorflow
【解决方案1】:
TensorFlow 中的随机节点每次调用时总是取不同的值,你可以通过多次调用来验证
import tensorflow as tf
x = tf.random_uniform(shape=())
sess = tf.Session()
sess.run(x)
# 0.79877698
sess.run(x)
# 0.76016617
它不是 tensorflow 术语中的 Variable,正如您可以从上面的代码中检查的那样,它无需调用变量初始化即可运行。
【解决方案2】:
如果您将随机生成的值分配给Variable,那么此值将保持固定,直到您更新此变量。
如果您直接将损失函数放入数字的“生成”(tf.random_*),那么它们在每次调用时都会有所不同。
试试这个:
import tensorflow as tf
# generator
x = tf.random_uniform((3,1), minval=0, maxval=10)
# variable
a = tf.get_variable("a", shape=(3,1), dtype=tf.float32)
# assignment
b = tf.assign(a, x)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(5):
# 5 different values
print(sess.run(x))
# assign the value
sess.run(b)
for i in range(5):
# 5 equal values
print(sess.run(a))