我正在制作一个没有任何其他外部 NN 库的 NN 库,因此我正在从头开始实现所有层,包括展平层和算法(前向和后向传递)。我知道 flatten 层的前向实现,但是后向是否只是重塑它?如果是,我可以调用一个简单的 NumPyreshape
函数来重塑它吗?
我应该如何通过 CNN 的扁平层实现反向传递?
人工智能
神经网络
卷积神经网络
反向传播
执行
2021-11-02 14:31:36
2个回答
该Flatten
层本身没有可学习的参数(它执行的操作完全由构造定义);仍然,它必须将梯度传播到前一层。
通常,该Flatten
操作是适定的,因为无论输入形状是什么,您都知道输出形状是什么。
当你反向传播时,你应该做一个“Unflatten”,它将一个扁平的张量映射到一个给定形状的张量,并且你知道那个特定的形状是从前向传递中得到的,所以它也是一个合适的操作。
更正式的
假设您Img1
输入了Flatten
图层
所以,在你的输出中
当你计算梯度时,你有
并且所有内容都与前向传递中的位置相同,因此 unflatten 从张量映射到(1, 4)
张(2, 2)
量。
是的,一个简单的重塑就可以了。扁平化层只是重塑数据/激活以使其与其他层/功能兼容的工具。展平层本身不会改变激活,因此除了改变形状之外不需要特殊的反向传播处理。
其它你可能感兴趣的问题