Тензорный поток: какая разница между tf.nn.dropout и tf.layers.dropout

Я очень смущен, нужно ли использовать tf.nn.dropout или tf.layers.dropout.

Многие примеры MNIST CNN, похоже, используют tf.nn.droput, причем keep_prop является одним из параметров.

но как это отличается от tf.layers.dropout? является параметром "rate" в tf.layers.dropout, аналогичном tf.nn.dropout?

Или, вообще говоря, разница между tf.nn.dropout и tf.layers.dropout применима ко всем другим подобным ситуациям, как и аналогичные функции в tf.nn и tf.layers.

Ответ 1

Быстрый взгляд tensorflow/python/layers/core.py и tensorflow/python/ops/nn_ops.py показывает, что tf.layers.dropout является оберткой для tf.nn.dropout.

Единственные различия в двух функциях:

  • tf.nn.dropout имеет параметр keep_prob: "Вероятность сохранения каждого элемента"
    tf.layers.dropout имеет параметр rate: "Скорость отсева"
    Таким образом, keep_prob = 1 - rate как определено здесь
  • tf.layers.dropout имеет параметр training: "Вернуть ли выход в режим обучения (применить исключение) или в режим вывода (вернуть вход нетронутым)".

Ответ 2

Идея такая же, параметры несколько разные. В nn.dropout, keep_prob - это вероятность сохранения каждого элемента. В layers.dropout rate = 0.1 выпадет 10% единиц ввода.

Итак keep_prob = 1 - rate. Также layer.dropout позволяет параметр training.

В общем, просто внимательно прочитайте документацию о функциях, о которых вы заботитесь, и вы увидите различия.

Ответ 3

На этапе обучения они идентичны (до тех пор, пока "скорость падения" и "постоянная скорость" не соответствуют). Однако для этапа оценки (теста) они совершенно разные. tf.nn.dropout по-прежнему будет делать случайное падение, а tf.layers.dropout ничего не потеряет (прозрачный слой). В большинстве случаев имеет смысл использовать tf.layers.dropout.

Ответ 4

Помимо ответов от @nikpod и @Salvador Dali

tf.nn.dropout масштабировал вес по 1./keep prob во время тренировочной фазы, а tf.layers.dropout масштабировал вес на 1./(1-rate).

Во время оценки вы можете установить keep prob равным 1, что эквивалентно установке обучения на false.