用Tens初始化神经网络权值

2024-09-29 01:31:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个使用Tensorflow的神经网络模型。在LOSO交叉验证中,我需要训练一个10倍的模型,因为我有来自10个不同主题的数据。在

考虑到这一点,我需要在每次交叉验证折叠开始时重置优化器和网络权重。我将权重定义如下:

weights = {
    'w1' : tf.Variable(tf.random_uniform(shape = [100, 10],seed =   0)),

    'w2' : tf.Variable(tf.random_uniform(shape = [10, 100],seed = 0))}

我通过重新初始化所有全局变量来重置优化器和权重,如下所示:

^{pr2}$

但是,在循环的每一次迭代中,我会为权重打印不同的值,就像我设置为0的操作种子没有完成它的工作一样。有人知道我错过了什么吗?在


Tags: 数据模型主题tftensorflow神经网络randomuniform
1条回答
网友
1楼 · 发布于 2024-09-29 01:31:19

我想发生的事情如下。假设在脚本开头将初始种子设置为42:

set_seed(42)

然后,抽取一个随机数:

^{pr2}$

现在,您再次采样:

sample()
>>> 0.311

它是不同的。不是虫子。set_seed()函数告诉系统在每次运行程序时从第42位开始(在伪随机数序列中)取样“随机”数,而不是每次调用sample函数。尝试多次运行程序。您将看到,您的参数的权重在折叠之间是不同的,但在多个运行中是相同的,即在所有运行中,在fold 1,权重将始终初始化为相同的值。在


现在,如何解决这个问题?

在脚本开始处对随机初始化进行一次采样,并在每次折叠开始时使用它初始化权重:

w = tf.Variable(..., initializer=YOUR_NUMPY_ARRAY)

相关问题 更多 >