Тензорный поток: какая разница между 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.