背景
随机种子
TF的随机种子设置策略如下,参考python/framework/random_seed.py。
tf.set_random_seed()
设置默认graph的graph-level random seed。
依赖于random seed的Op实际上是从两个seed派生出来的:
graph-level seeds 和 operation-level seeds。这里将设置graph-level seeds。
它与operation_seeds的交互如下:
1. 如果graph_seeds和operation_seeds都没有设置:
此操作使用随机种子。
2.如果设置了graph_seeds,但没有设置operation_seeds:
系统确定性地选择一个operation_seeds和graph_seeds,以便它获得唯一的随机序列。
3.如果没有设置graph_seeds,但是设置了operation_seeds:
默认的graph_seeds和指定的operation_seeds用于确定随机序列。
4. 如果graph_seeds和operation_seeds都设置了:
两个seed结合使用来确定随机序列。
要跨sessions生成不同的序列,请不要设置graph_seeds和operation_seeds;
要跨sessions为操作生成相同的可重复序列,请设置operation_seeds;
要使所有ops生成的随机序列在sessions中可重复,请设置graph_seeds;
tf.get_seed()
返回给定ops特定种子时ops应该使用的local seeds。
给定特定于ops的种子 `op_seed`,这个辅助函数返回两个从graph_seeds和operation_seeds派生的种子。
许多随机ops在内部使用这两个种子,以允许用户全局更改graph_seeds,或仅针对特定ops。