Почему torch.nn.Sigmoid - это класс, а не метод? - PullRequest
1 голос
/ 11 апреля 2019

Я пытаюсь понять, как Pytorch работает немного лучше. Обычно при определении класса нейронной сети в конструкторе init () люди пишут self.sigmoid = nn.Sigmoid (), чтобы в методе forward () они могли вызывать функцию sigmoid несколько раз. с необходимостью каждый раз заново создавать nn.Sigmoid ().

Но почему nn.Sigmoid - это не просто метод, а метод для начала?

Кроме того, мне было любопытно, что ссылаться на 'nn' в torch.nn как (пакет? Библиотека?).

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 апреля 2019

Сигмоид доступен как модуль torch.nn.Sigmoid и функция torch.sigmoid. Эти два эквивалента: модуль является просто оберткой вокруг функции.

Модуль существует в основном по историческим причинам: PyTorch был основан на пакете Lua torch7. В torch7 все дифференцируемые функции нейронной сети были реализованы в виде модулей. Модуль также может использоваться в блоках torch.nn.Sequential для сетей с простыми структурами прямой связи.

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

nn в torch.nn означает "нейронная сеть".

1 голос
/ 11 апреля 2019

Насколько я понимаю, nn.Sigmoid существует для того, чтобы его можно было комбинировать с другими nn слоями, например:

net = nn.Sequential(
      nn.Linear(3, 4),
      nn.Sigmoid())

Если вам это не нужно, вы можете просто использовать функцию torch.sigmoid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...