Использование Dropout в Pytorch: nn.Dropout против F.dropout

МилыйЯд:

Используя pyTorch, есть два способа отсеивания torch.nn.Dropoutи torch.nn.functional.Dropout.

Я с трудом вижу разницу между их использованием:

  • Когда что использовать?
  • Есть ли разница?

Я не вижу никакой разницы в производительности, когда я их поменял.

ОБТ:

Технические различия уже были показаны в другом ответе. Однако главное отличие состоит в том, что nn.Dropoutэто сам модуль фонарика, который имеет некоторое удобство:

Краткий пример для иллюстрации некоторых различий:

import torch
import torch.nn as nn

class Model1(nn.Module):
    # Model 1 using functional dropout
    def __init__(self, p=0.0):
        super().__init__()
        self.p = p

    def forward(self, inputs):
        return nn.functional.dropout(inputs, p=self.p, training=True)

class Model2(nn.Module):
    # Model 2 using dropout module
    def __init__(self, p=0.0):
        super().__init__()
        self.drop_layer = nn.Dropout(p=p)

    def forward(self, inputs):
        return self.drop_layer(inputs)
model1 = Model1(p=0.5) # functional dropout 
model2 = Model2(p=0.5) # dropout module

# creating inputs
inputs = torch.rand(10)
# forwarding inputs in train mode
print('Normal (train) model:')
print('Model 1', model1(inputs))
print('Model 2', model2(inputs))
print()

# switching to eval mode
model1.eval()
model2.eval()

# forwarding inputs in evaluation mode
print('Evaluation mode:')
print('Model 1', model1(inputs))
print('Model 2', model2(inputs))
# show model summary
print('Print summary:')
print(model1)
print(model2)

Вывод:

Normal (train) model:
Model 1 tensor([ 1.5040,  0.0000,  0.0000,  0.8563,  0.0000,  0.0000,  1.5951,
         0.0000,  0.0000,  0.0946])
Model 2 tensor([ 0.0000,  0.3713,  1.9303,  0.0000,  0.0000,  0.3574,  0.0000,
         1.1273,  1.5818,  0.0946])

Evaluation mode:
Model 1 tensor([ 0.0000,  0.3713,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000,
         0.0000,  0.0000,  0.0000])
Model 2 tensor([ 0.7520,  0.1857,  0.9651,  0.4281,  0.7883,  0.1787,  0.7975,
         0.5636,  0.7909,  0.0473])
Print summary:
Model1()
Model2(
  (drop_layer): Dropout(p=0.5)
)

Итак, что я должен использовать?

Оба полностью эквивалентны с точки зрения применения отсева, и хотя различия в использовании не так велики, есть несколько причин для предпочтения этого nn.Dropoutварианта nn.functional.dropout:

Отсев предназначен для применения только во время обучения, поэтому при прогнозировании или оценке модели вы хотите отключить отсев.

Модуль выпадения nn.Dropoutудобно обрабатывает это и отключает выпадение, как только ваша модель переходит в режим оценки, в то время как функциональный отсев не заботится о режиме оценки / прогнозирования.

Несмотря на то, что вы можете установить функцию training=Falseотключения функции, чтобы отключить ее, это все же не такое удобное решение, как с nn.Dropout.

Также в модуле хранится частота выпадения, поэтому вам не нужно сохранять его в дополнительной переменной. В более крупных сетях вы можете захотеть создать разные слои отсева с разной скоростью отбрасывания - это nn.Dropoutможет улучшить читаемость, а также может принести некоторое удобство при использовании слоев несколько раз.

Наконец, все модули, назначенные вашей модели, регистрируются в вашей модели. Итак, класс модели отслеживает их, поэтому вы можете просто отключить модуль отсева, позвонив eval(). При использовании функции исключения ваша модель не знает об этом, поэтому она не будет отображаться ни в какой сводке.

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

Использование Dropout на выходе слоя внедрения изменяет значения массива. Почему?

Нейронные сети: как часто обновляется «фильтр» Dropout?

Потеря валидации при использовании Dropout

Почему слой Pytorch Dropout влияет на все значения, а не только на нулевые?

Почему ввод масштабируется в tf.nn.dropout в тензорном потоке?

PyTorch: Dropout (?) Вызывает различную конвергенцию модели для обучения + проверки V. только для обучения

Измерение погрешности с использованием MC Dropout на pytorch

Могу ли я использовать tf.nn.dropout для реализации DropConnect?

В чем разница между слоем dropout и параметром dropout в любом слое keras

tenorflow: в чем разница между tf.nn.dropout и tf.layers.dropout

Имеет ли применение Dropout Layer после Embedding Layer тот же эффект, что и применение dropout с помощью параметра LSTM dropout?

Почему в Keras Dropout изменяются ненулевые значения?

ConvNetSharp - использование Dropout

TensorFlow - воспроизведение результатов при использовании dropout

Как добавить Dropout в CNN

Как добавить Dropout в функциональную модель Keras?

Слои Tensorboard и Dropout

Как применить метод Монте-Карло Dropout в тензорном потоке для LSTM, если пакетная нормализация является частью модели?

Tensorflow: что такое tf.nn.dropout output_keep_prob?

Tensorflow: в чем разница между tf.nn.dropout и tf.contrib.rnn.DropoutWrapper?

Tensorflow: понимание вывода LSTM с Dropout Wrapper и без него

На какие слои влияет Dropout Layer в Tensorflow?

tenorflow dropout - требуется нормализация веса после изменения, чтобы сохранить вероятность 1?

Caffe: почему слой Dropout существует и в Deploy (тестирование)?

Как интерпретировать tf.layers.dropout

О правильном использовании dropout в RNN (Keras)

dropout with relu activations

Реализация Tensorflow LSTM Dropout

Реализация Tensorflow LSTM Dropout

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    Как не использовать HttpClient с ЛЮБЫМ сертификата SSL, независимо от того, как «плохо» это

  3. 3

    Modbus Python Schneider PM5300

  4. 4

    (fields.E300) Поле определяет связь с моделью, которая либо не установлена, либо является абстрактной.

  5. 5

    Elasticsearch - Нечеткий поиск не дает предложения

  6. 6

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  7. 7

    Перебирайте несколько столбцов в фрейме данных Panda и находите уникальные значения подсчета

  8. 8

    Merging legends in plotly subplot

  9. 9

    SQL Вычтите две строки друг от друга в одном столбце, чтобы получить результат

  10. 10

    Автозаполнение с Java, Redis, Elastic Search, Монго

  11. 11

    Vue js CLI 2 импортирует и использует плагин javascript

  12. 12

    Метод ошибки Illuminate \\ Database \\ Eloquent \\ Collection :: save не существует. в Laravel

  13. 13

    Single legend for Plotly subplot for line plots created from two data frames in R

  14. 14

    В чем разница между CRC-16 / CCITT-FALSE и CRC-16 / X-25?

  15. 15

    Ленивое объединение FPU в Cortex-M4F

  16. 16

    Как очистить или очистить StringBuilder?

  17. 17

    PyQt5 не работает как «подходящий UI Toolkit» для Mayavi с Python 3.6.

  18. 18

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  19. 19

    Vue 2 / Vue CLI 3: создание асинхронных однофайловых компонентов

  20. 20

    Текущая ветка не настроена для извлечения В конфигурации не найдено значение для ключа branch.master.merge

  21. 21

    Проблемы со сборкой Python Image Registration Toolkit

популярныйтег

файл