Общий класс для Linear, Conv1d, Conv2d, ..., LSTM, - PullRequest
2 голосов
/ 18 марта 2019

Есть ли класс, который все 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.

Спасибо, Afshin

1 Ответ

0 голосов
/ 27 марта 2019

Я обнаружил, что nn::sequential может использоваться для этой цели, и он не нуждается в предварительной реализации, которая может быть положительным моментом и одновременно отрицательным моментом. nn::sequential уже требует, чтобы у каждого модуля была прямая реализация, и вызывает функции пересылки в последовательности, в которую они добавили. Таким образом, нельзя создать нестандартный прямой переадресацию, как Dense-Net с этим, хотя это достаточно для обычного использования.

Кроме того, похоже, что nn::sequential просто использует std::vector<nn::AnyModule> в качестве базового списка модулей. Таким образом, std::vector<nn::AnyModule> также может быть использовано.

...