Что именно является определением "модуля" в PyTorch?


Пожалуйста, извините за вопрос новичка, но является ли Module точно таким же, как и model?

Вот как это звучит, когда в документации говорится:

Всякий раз, когда вам нужна модель более сложная, чем простая последовательность существующих модулей, вам нужно будет определить свою модель (как пользовательский подкласс Module).

Или... когда они упоминают Module, имеют ли они в виду что-то более формальное и компьютерное, например, протокол / интерфейс?

2 2

2 ответа:

Это простой контейнер.

Из документов nn.Module

Base class for all neural network modules.
Your models should also subclass this class.
Modules can also contain other Modules, allowing to nest them in a tree structure. 
You can assign the submodules as regular attributes.
Submodules assigned in this way will be registered, 
and will have their parameters converted too when you call `.cuda()`, etc.

Из учебника :

All network components should inherit from nn.Module and override the forward() method. 
That is about it, as far as the boilerplate is concerned. 
Inheriting from nn.Module provides functionality to your component. 
For example, it makes it keep track of its trainable parameters, 
you can swap it between CPU and GPU with the .to(device) method, 
where device can be a CPU device torch.device("cpu") or CUDA device torch.device("cuda:0").

Модуль-это контейнер, от которого должны наследовать слои, субпараметры модели (например, BasicBlock в resnet в torchvision) и модели. Да и зачем им это? Потому что наследование от nn.Module позволяет вызывать такие методы, как to("cuda:0"), .eval(), .parameters() или легко регистрировать крючки.

  • Почему бы просто не назвать "модуль" моделью, а слои - "слоями"? Наверное это просто семантика и расщепление волос, но все же...

Это выбор дизайна API, и я нахожу, что только класс Module вместо двух отдельных Model и Layers должен быть чище и предоставлять больше свободы (проще отправить только часть модели на GPU, чтобы получить параметры только для некоторых слоев...).

Не будучи экспертом по pytorch, я понимаю, что модуль в контексте pytorch-это просто контейнер, который принимает тензоры в качестве входных данных и вычисляет тензоры в качестве выходных данных.

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

Надежда это помогает