我正在使用tf.truncated\u normal\u初始值设定项要初始化权重和偏差:
with tf.variable_scope('params'):
weights = tf.get_variable(name="weights1",shape = [2*rnn_size, n_classes],initializer = tf.truncated_normal_initializer(seed=seed))
biases = tf.get_variable(name="biases1",shape = [n_classes],initializer = tf.truncated_normal_initializer(seed=seed))
为了使它们在不同的运行中保持相同的重复性,我将种子设置为op级别。另外,我在同一个图形中使用
tf.reset_default_graph()
后来:
tf.set_random_seed(seed)
除此之外,我还将numpy和random seed设置为与上述seed相同的值(tfseed的值与seed相同)。你知道吗
np.random.seed(tfseed)
random.seed(tfseed)
训练和打印第1次、第2次和第3次在epoch 0的值并比较它们时,我注意到重量有轻微的变化。你知道吗
到了94世纪,变化变得更加明显:
在更高的纪元1000+时,权重可能会变得更加不同,从而导致不同的精度。我试图有再现性,以尝试不同的超参数。你知道吗
尽管种子是相同的,但不同跑步的重量/偏差的微小差异背后的原因是什么?我们如何避免这种差异?你知道吗
有没有一种方法可以避免在不同的时间段使用不同的重量,从而在非常高的时间段内实现完全的再现性?你知道吗
更新编辑- 在epoch 0打印的权重是在epoch 0之后打印的,我误解了这些权重是初始权重。在我注意到这一点并在历元计算前打印重量之后。我可以看到初始重量是一样的。所以种子是按计划工作的。你知道吗
Before Epoch 0 - Run 0 weights vs Run 1 weights
Before Epoch 0 - Run 1 weights vs Run 2 weights
从注释和其他参考资料来看,tensorflow在GPU/CPU(https://github.com/tensorflow/tensorflow/issues/3103)上的工作方式,tf.u平均值以及减少总和是不确定的,这可能解释了为什么重量在不同的时间不同的运行不断变化,导致不同的精度在高历元(4至7%的差异,在1000历元为10运行我的训练LSTM)。你知道吗
当使用相同的参数(由于不确定性行为)时,精度有变化时,通常如何进行超参数调整?如何确定精度的提高实际上是由于超参数的变化?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐