Я пытаюсь понять, как pytorch работает немного лучше. Обычно при определении класса нейронной сети в конструкторе в этом() люди пишут self.sigmoid = nn.Sigmoid(), так что в методе forward() они могут вызывать сигмоидную функцию несколько раз с необходимостью повторного создания nn. Сигмоид() каждый раз.
Но почему nn.Sigmoid не является для начала просто методом, а не классом?
Кроме того, мне было любопытно, что называть «nn» в torch.nn как (пакет? библиотека?).
Спасибо!
Насколько я понимаю, nn.Sigmoid
существует для компоновки с другими слоями nn, например:
net = nn.Sequential(
nn.Linear(3, 4),
nn.Sigmoid())
Если вам это не нужно, вы можете просто использовать функцию torch.sigmoid
.
Сигмоид доступен как в виде модуля torch.nn.Sigmoid
, так и в виде функции torch.sigmoid
. Они эквивалентны: модуль — это просто оболочка вокруг функции.
Модуль существует в основном по историческим причинам: PyTorch был основан на пакете Lua torch7. В torch7 все дифференцируемые функции нейросети были реализованы в виде модулей. Модуль также можно использовать в блоках torch.nn.Sequential
для сетей с простой структурой прямой связи.
Кроме этого, нет никакого преимущества в использовании формы модуля над формой функции.
nn
в torch.nn
означает «нейронная сеть».
torch.nn — это библиотека с кучей модулей, таких как Sigmoid. Sigmoid — это «модуль» в документах, поскольку он является подклассом класса Module. Проверьте - "что такое torch.nn на самом деле?" здесь pytorch.org/tutorials/beginner/nn_tutorial.html