मैंने हाल ही में एक वीडियो देखा जिसने मुझे अपना तंत्रिका नेटवर्क सिस्टम लिखने के लिए प्रेरित किया, और मैं नेटवर्क में नोड्स की मात्रा समायोज्य होना चाहता था।वैरिएड टेम्पलेटिंग पर निर्भर प्रकार वाले वर्ग
पहले मैंने इसे नोड्स की संख्याओं की एक सरणी को पार्स करके रनटाइम पर हासिल किया लेकिन मैं सोच रहा था कि मैं इसके बजाय संकलन समय पर ऐसा कर सकता हूं। यहां एक ऐसी चीज का उदाहरण दिया गया है जिसे मैं पूरा करने की उम्मीद कर रहा था।
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());
}
};
ऐसा करने में सक्षम था लेकिन तब मैं सिर्फ गतिशील matricies फिर से उपयोग कर रहा हूँ और कहा कि नहीं है कि मैं क्या के लिए उम्मीद की गई थी।
कोई सलाह या काम करने वाले उदाहरणों की बहुत सराहना की जाएगी।
वैसे, लाइन 'मीटर (* (i ++), * i)' का आह्वान C++ 14 तक अपरिभाषित व्यवहार, C++ 17 –
* बेशर्म आत्म को बढ़ावा देने के * आपको पता चल सकता [में अनिर्दिष्ट यह रेपो] (https://github.com/liammcinroy/MetaTemplateNeuralNet) दिलचस्प है –