tf.random的值要变的问题的解决

在 TensorFlow 中,使用 tf.random.uniform 创建的张量每次运行都会生成新的随机数。通过将张量转换为 tf.Variable 并进行初始化,可以确保其值在多次评估时保持一致。修改后的代码展示了如何创建一个不变的随机张量,并通过 Session 获取和打印其值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值