为什么TensorFlow tf.data.Dataset.shuffle函数的reshuffle_each_iteration布尔参数默认为None,而不是True?

时间:2018-01-31 21:57:26

标签: python tensorflow tensorflow-datasets

documentation for the tf.Dataset.data.shuffle function声明如下:

  
      
  • reshuffle_each_iteration :(可选。)布尔值,如果为true,则表示每次迭代时都应对数据集进行伪随机重组。 (默认为True。)
  •   

但是,该函数中的默认值为None,如同一页和the actual code中所述:

def shuffle(self, buffer_size, seed=None, reshuffle_each_iteration=None):

该函数调用ShuffleDataset类,其__init__函数也sets the same argument to None by defaultuses the following logic将参数的默认值设置为True:

if reshuffle_each_iteration is None:
  self._reshuffle_each_iteration = True
else:
  self._reshuffle_each_iteration = reshuffle_each_iteration

为什么函数和类中的参数默认设置为True?这将使上面的代码块变得多余,并允许仅用self._reshuffle_each_iteration = reshuffle_each_iteration替换它。

谢谢!

1 个答案:

答案 0 :(得分:1)

@mrry here回答:

  
      
  • 一般来说,我更喜欢None作为默认参数,因为它可以更容易地围绕API编写包装器。如果默认参数设置为True,则包装器很难使用包装函数的默认值,而不会在每个包装层上复制默认值。使用None并在最里层实现默认值更容易维护。
  •   
  • 当默认参数可以是可变类型(如列表)时,使用None也与必要的样式一致,并且将默认值放在参数列表中是不安全的。
  •