我正在使用 const 泛型和宏在编译时构建一个简单的前馈神经网络。这些是一个接一个的一堆矩阵。
我创建了network!
宏,它的工作原理是这样的:
network!(2, 4, 1)
第一项是输入的数量,其余的是每层的神经元数量。宏如下所示:
#[macro_export]
macro_rules! network {
( $inputs:expr, $($outputs:expr),* ) => {
{
Network {
layers: [
$(
&Layer::<$inputs, $outputs>::new(),
)*
]
}
}
};
}
它声明了一个层元素数组,它使用 const 泛型在每一层上拥有一个固定大小的权重数组,第一个类型参数是它期望的输入数量,第二个类型参数是输出数量。
该宏产生以下代码:
Network {
layers: [
&Layer::<2, 4>::new(),
&Layer::<2, 1>::new(),
]
}
这是完全错误的,因为对于每一层,输入的数量应该是前一层的输出数量,就像这样(注意 2 -> 4):
Network {
layers: [
&Layer::<2, 4>::new(),
&Layer::<4, 1>::new(),
]
}
为此,我需要在每次迭代时将值替换为$inputs
的值$outputs
,但我不知道该怎么做。