卷积层到全连接层的实现

人工智能 神经网络 卷积神经网络 C++
2021-11-11 12:17:17

我在 C++ 中从头开始实现神经网络框架作为学习练习。有一个概念我在任何地方都没有清楚地解释:如何从最后一个“3 维”的卷积/池化/某个层到网络中的第一个全连接层?

许多消息来源说,您应该展平数据。这是否意味着您应该只创建一个1D大小为的向量NMD(NM是最后一次转化。层的大小,和D是该层中激活图的数量)并以任意顺序将数字一一放入其中?

如果是这种情况,我了解如何进一步传播,但是反向传播如何在这里工作?只是将值以相反的顺序放入激活图中?

我还读到,您可以将这种“展平”作为张量收缩进行。这究竟是如何工作的?

1个回答

是的,你是对的(我认为它很容易在 C++ 中用指针实现)。但是要保持任意顺序,因为完全连接的神经网络是“平移不变的”,即您必须确保像素(1,5,6)正在提供给节点38或被索引为37作为要输入到全连接神经网络的单个数据点,然后从那时起它必须被修复(不能说像素(1,6,5)在节点38.

反向传播的工作方式和往常一样,很难给出口头解释,所以我给你这张图:

在此处输入图像描述

因此,基本上,如果您像这样进行可视化,您就会明白您必须进行微分传播,“扁平化”只是重塑值查找表,它不会改变值影响最终损失的方式,所以如果你对每个值取梯度,然后将其转换回3D以与以前相同的方式映射,然后像在之前的图层中那样传播渐变。