Общий класс для 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> также может быть использован.

Другие вопросы по тегам