我正在开发一个使用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的操作种子没有完成它的工作一样。有人知道我错过了什么吗?在
我想发生的事情如下。假设在脚本开头将初始种子设置为42:
然后,抽取一个随机数:
^{pr2}$现在,您再次采样:
它是不同的。不是虫子。
set_seed()
函数告诉系统在每次运行程序时从第42位开始(在伪随机数序列中)取样“随机”数,而不是每次调用sample
函数。尝试多次运行程序。您将看到,您的参数的权重在折叠之间是不同的,但在多个运行中是相同的,即在所有运行中,在fold 1,权重将始终初始化为相同的值。在现在,如何解决这个问题?
在脚本开始处对随机初始化进行一次采样,并在每次折叠开始时使用它初始化权重:
相关问题 更多 >
编程相关推荐