tf.random的值要变的问题的解决办法
- 我最初的代码代码
import tensorflow as tf
sess=tf.Session()
arr=tf.random.uniform(shape=[3,4,5],minval=1,maxval=10,dtype=tf.int32,seed=1)
print(sess.run(arr))
print("=============================================")
print(sess.run(arr))
print("=============================================")
对应最初的代码的输出:
[[[1 9 4 8 8]
[6 7 3 3 1]
[6 9 6 1 5]
[1 2 7 8 1]]
[[1 5 8 7 3]
[6 5 2 3 1]
[7 3 8 5 1]
[6 6 1 2 5]]
[[9 4 9 3 6]
[3 3 4 4 5]
[1 6 9 3 6]
[2 5 6 5 7]]]
=============================================
[[[3 6 7 4 7]
[8 8 1 3 4]
[8 7 6 4 3]
[9 3 8 8 8]]
[[1 3 5 5 7]
[6 5 3 8 5]
[9 5 3 9 1]
[2 4 9 9 6]]
[[2 8 2 7 9]
[2 7 7 6 8]
[6 6 2 1 9]
[3 9 4 2 8]]]
=============================================
Process finished with exit code 0
- 问题:会发现明明都需要输出的是arr,却不一样的值
- 原因:tf.random,xxx是随机张量,TensorFlow 有几个 ops 用来创建不同分布的随机张量.随机操作是有状态的,并在每次评估时创建新的随机值(见:https://www.w3cschool.cn/tensorflow_python/tensorflow_python-efts28tw.html),要让值不变化要将其转化为变量(Variable),要将生成的随机张量转化为变量,tf.Variable(tf.random.xxx()),转换为变量量之后要对其初始化。
- 修改后的代码:
arr=tf.Variable(tf.random.uniform(shape=[3,4,5],minval=1,maxval=10,dtype=tf.int32,seed=1))
init = tf.global_variables_initializer()#设置了变量(Variable)之后要对变量初始化
sess=tf.Session()#Session用于后面取出值
sess.run(init)#Session初始化init
print(sess.run(arr))#用session取值,取到值后打印
print("=============================================")
arr2=arr
print(sess.run(arr))
最后输出:
[[[1 9 4 8 8]
[6 7 3 3 1]
[6 9 6 1 5]
[1 2 7 8 1]]
[[1 5 8 7 3]
[6 5 2 3 1]
[7 3 8 5 1]
[6 6 1 2 5]]
[[9 4 9 3 6]
[3 3 4 4 5]
[1 6 9 3 6]
[2 5 6 5 7]]]
=============================================
[[[1 9 4 8 8]
[6 7 3 3 1]
[6 9 6 1 5]
[1 2 7 8 1]]
[[1 5 8 7 3]
[6 5 2 3 1]
[7 3 8 5 1]
[6 6 1 2 5]]
[[9 4 9 3 6]
[3 3 4 4 5]
[1 6 9 3 6]
[2 5 6 5 7]]]