Недавно я просмотрел видео, которое вдохновило меня написать мою собственную систему нейронных сетей, и я хотел, чтобы количество узлов в сети было настраиваемым.
Сначала я достиг этого во время выполнения, анализируя массив чисел узлов, но мне было интересно, могу ли я сделать это во время компиляции. Вот пример того, что я надеялся выполнить.
template<int FirstNodes, int SecondNodes, int... OtherNodes>
class Net
{
tuple<Eigen::Matrix<float, FirstNodes, SecondNodes>, ...> m_weights;
// More matricies with the values from the OtherNodes
};
В качестве более подробного примера Net<784, 16, 16, 10> n;
n.m_weight должен иметь тип
tuple<Eigen::Matrix<float, 784, 16>,
Eigen::Matrix<float, 16, 16>,
Eigen::Matrix<float, 16, 10>>
Из того, что я знаю о С++ и constexpr, это должно быть возможно.
Я должен добавить, что я смог сделать
template<int FirstNodes, int SecondNodes, int... OtherNodes>
class Net
{
public:
Net()
{
auto nodes = {FirstNodes, SecondNodes, OtherNodes...};
auto i = nodes.begin();
do
{
// Eigen::Matrix<float, Dynamic, Dynamic>
Eigen::MatrixXf m(*(i++), *i);
} while (i+1 != nodes.end());
}
};
Но потом я снова использую динамические матрицы, и это не то, на что я надеялся.
Приветствуются любые советы или рабочие примеры.