Что именно является определением "модуля" в PyTorch?
Пожалуйста, извините за вопрос новичка, но является ли Module
точно таким же, как и model
?
Вот как это звучит, когда в документации говорится:
Всякий раз, когда вам нужна модель более сложная, чем простая последовательность существующих модулей, вам нужно будет определить свою модель (как пользовательский подкласс
Module
).
Или... когда они упоминают Module
, имеют ли они в виду что-то более формальное и компьютерное, например, протокол / интерфейс?
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 модуля, каждый из которых представляет собой слой нейронной сети. Таким образом, они связаны в том смысле, что вам нужны модули для актуализации вашей модели, но это не одно и то же.Надежда это помогает