我在模型中生成一个随机数
rand_int = tf.random.uniform((), 0, 2, dtype=tf.int32)
然而,随机数并不改变每个时期。我将如何做到这一点,每一个时期,甚至每一批,如果这是更容易?
编辑:
下面是一些关于我想如何处理随机数的更多信息。
def random_func(X):
if rand_int == 0:
# Do something X
if rand_int == 1:
# Do something else to X
return X
X = random_func(X)
每个历元我都想随机改变X,所以每个历元我都想要一个不同的随机数。
2条答案
按热度按时间egdjgwm81#
您可以使用回调函数在每个时期(或批处理)结束时调用函数,每次生成一个新的随机数。关于回调函数及其提供的选项的读取模式here。
您可以在函数内部将xx设置为全局。
1.在每个时期结束时生成随机数
1.某些条件在rand_int上运行,xx为update
1.在训练结束时将xx的最终值返回给变量xx。
正如你所看到的,rand_int会导致xx根据每个时期的函数改变值,并且xx的最终状态也会被返回。
ivqmmu1c2#
因此,这似乎并不是tf.random.uniform的预期行为,实际上它每次都应该生成一个新的随机数。https://github.com/tensorflow/tensorflow/issues/36715
虽然有些人建议改用新的Generator对象来生成随机数,但在我的例子中,这并没有解决问题,全局变量方法对我的例子也不可行。
我所做的是将包含随机数生成的代码封装在一个自定义层的call方法中,正如下面的评论中所提到的:https://github.com/tensorflow/tensorflow/issues/36715#issuecomment-586349200
请注意,这将导致每 * 批 * 一个新的随机数,而不是每一个时期,但根据您的问题,这似乎是足够的,不需要全局变量和回调等。无论如何,我认为其他人可能会受益