Почему логический аргумент reshuffle_each_iteration функции TensorFlow tf.data.Dataset.shuffle по умолчанию имеет значение None, а не True?

документация по функции tf.Dataset.data.shuffle заявляет следующее:

  • reshuffle_each_iteration: (необязательно.) Логическое значение, которое, если оно равно true, указывает, что набор данных должен перетасовываться псевдослучайно каждый раз, когда он повторяется. (По умолчанию Истина.)

Однако значением по умолчанию для функции является None, как указано на той же странице и в фактический код:

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

Функция вызывает класс ShuffleDataset, функция __init__ которого также устанавливает для того же аргумента значение None по умолчанию и использует следующую логику, чтобы установить значение аргумента по умолчанию в 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.


person KRish    schedule 31.01.2018    source источник
comment
Если он не используется где-то еще, его, вероятно, следует заменить. Может быть, отправить запрос на вытягивание?   -  person Evan Weissburg    schedule 03.02.2018
comment
Я пошел дальше и сделал это здесь: github.com/tensorflow/tensorflow/pull/16810   -  person KRish    schedule 07.02.2018


Ответы (1)


Ответ @mrry здесь:

  • В общем, я предпочитаю None для аргументов по умолчанию, потому что это упрощает написание оболочек для API. Если для аргумента по умолчанию задано значение True, оболочке сложно использовать значение по умолчанию обернутой функции, не создавая копию значения по умолчанию на каждом уровне оболочки. Использование None и реализация значения по умолчанию на самом внутреннем уровне проще в обслуживании.
  • Использование None также соответствует необходимому стилю, когда аргумент по умолчанию может быть изменяемого типа (например, список) и небезопасно помещать значение по умолчанию в список аргументов.
person KRish    schedule 07.02.2018