Общий класс для Linear, Conv1d, Conv2d,..., LSTM,
Есть ли класс, который все torch::nn::Linear, torch::nn::Conv1d, torch::nn::Conv2d, ... torch::nn::GRU, ....
все наследовать от этого? torch::nn::Module
кажется, хороший вариант, хотя есть средний класс, называемый torch::nn::Cloneable
, чтобы torch::nn::Module
не работает. Также, torch::nn::Cloneable
Сам по себе является шаблоном, поэтому необходимо указать тип в объявлении. Я хочу создать генерала class model
, у которого есть std::vector<the common class> layers
чтобы потом можно было заполнить layers
с любым типом слоя, который я хочу, например, Linear, LSTM,
и т.д. Есть ли такая возможность в текущем API? Это может быть легко сделано в Python, хотя здесь нам нужно объявление, и это препятствует легкости Python.
Спасибо афшин
1 ответ
Я нашел это nn::sequential
может быть использован для этой цели, и он не нуждается в предварительной реализации, что может быть как положительным, так и одновременно отрицательным моментом. nn::sequential
уже требует, чтобы у каждого модуля была прямая реализация, и вызывает передовые функции в последовательности, в которую они добавлены. Таким образом, нельзя создать нестандартный прямой проход ad-hock, такой как Dense-Net, хотя он достаточно хорош для общего использования.
Кроме того, кажется, что nn::sequential
просто использует std::vector<nn::AnyModule>
как его основной список модулей. Так, std::vector<nn::AnyModule>
также может быть использован.