gpt4 book ai didi

python - 如何在Tensorflow中生成静态随机常数?

转载 作者:行者123 更新时间:2023-12-01 07:40:39 25 4
gpt4 key购买 nike

我想在Tensorflow中生成一个常量张量,它将使用指定的机制进行初始化,例如random_uniform、random_normal。

我知道我可以根据这些机制生成随机 numpy 数组,例如 random_uniform、random_normal 等;然后我们将生成的 numpy 数组作为 tf.constant 中的值参数提供。

但是,问题是我们在使用 numpy 版本的随机机制时必须给出一个形状。但是,我不想预先指定形状,并且希望形状具有弹性,就像我们编写 Tensorflow 代码一样 shape = tf.shape(some_previous_tensor)

我尝试的方式1:在图构建阶段不必预先指定常量的具体形状。然而,生成的张量是随机的而不是静态的。这不是我所期望的。

var = tf.random.normal(
[2,2], mean=0.0, stddev=0.5, dtype=tf.float32,
)

with tf.Session() as sess:
print('var:', sess.run(var))
print('var:', sess.run(var))

Output:
var: [[ 0.21260215 0.13721827]
[ 0.7704196 -0.48304045]]

var: [[-0.63397115 -0.0956466 ]
[ 0.0761982 0.54037064]]

我尝试的方式2:我可以得到静态常量,但是需要在np.random.normal中给出一个大小,这不是我所期望的。

var_np = np.random.normal(0,0.5, size=(2,2))
var = tf.constant(value=var_np)

with tf.Session() as sess:
print('var:', sess.run(var))
print('var:', sess.run(var))

Output:
var: [[-0.73357953 -0.10277695]
[ 0.57406473 0.32157612]]
var: [[-0.73357953 -0.10277695]
[ 0.57406473 0.32157612]]

最佳答案

您可以使用tf.Variable/tf.get_variabletrainable=Falsevalidate_shape=False。您可以使用取决于形状占位符的值作为初始值。然后,当您初始化变量时(使用 initializer 属性或更常见的属性,如 tf.global_variables_initializer ),您只需给出初始化的形状即可。初始化后,只要没有再次初始化或分配不同的值,变量的值将在整个 session 中保持相同。

import tensorflow as tf

shape = tf.placeholder(tf.int32, [None])
var_init = tf.random.normal(
shape, mean=0.0, stddev=0.5, dtype=tf.float32,
)
var = tf.Variable(var_init, validate_shape=False, trainable=False, name='Var')
with tf.Session() as sess:
tf.random.set_random_seed(0)
sess.run(var.initializer, feed_dict={shape: [2, 3]})
print('var:', sess.run(var), sep='\n')
print('var:', sess.run(var), sep='\n')

输出:

var:
[[-0.4055751 0.7597851 -0.04810145]
[ 0.92776746 -0.3747548 -0.03715562]]
var:
[[-0.4055751 0.7597851 -0.04810145]
[ 0.92776746 -0.3747548 -0.03715562]]

关于python - 如何在Tensorflow中生成静态随机常数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56736161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com