【问题标题】:Collapsing consecutive linear layers折叠连续的线性层
【发布时间】:2018-11-22 22:09:36
【问题描述】:

我有一个具有 3 个连续线性层(卷积)的神经网络,中间没有激活函数。在训练网络并获得权重之后,我想将所有 3 层折叠成一层。

当每一层都有不同的内核大小和步幅时,如何在实践中做到这一点?

图层如下:

  1. 具有 3x3 内核、5 个输入通道和 5 个输出通道(大小为 3x3x5x5 的张量)的卷积层,步长为 1,填充“相同”
  2. 卷积层具有 5x5 内核、5 个输入通道和 50 个输出通道(张量大小为 5x5x5x50),步幅为 2,填充“相同”
  3. 具有 3x3 内核、50 个输入通道和 50 个输出通道(大小为 3x3x50x50 的张量)的卷积层,步长为 1,填充“相同”

提前致谢

【问题讨论】:

  • 请具体说明“将 3 层合并为一层”的含义。
  • @DocDriven 有一个卷积层,相当于拥有这三层

标签: python machine-learning neural-network convolution convolutional-neural-network


【解决方案1】:

置换第一层内核的维度,使输入通道位于“mini-batch”维度,输出通道位于“通道”维度。应用第二层,就好像那是一个图像。然后将第三层应用于该结果。最终结果是“折叠”层的内核。

使用“完整”填充所有这些操作。如果这大致正确(除了填充),请尝试修复填充(可能它应该在最后一次操作中“相同”)。

【讨论】:

  • 只是一个评论,这个解决方案是卷积的关联属性的结果。基本上,如果* 是卷积运算,并且您有图像x 与内核k1、k2、k3 然后((x * k1) * k2) * k3 = x * ((k1 * k2) * k3)
  • @jodag 对。如果我们没有或不知道关联属性,更通用和更繁琐的方法是解决((x * k1) * k2) * k3 = x * k 为k。或者如果我们不知道它可以写成x * k,那么我们可以尝试用不同的方式重写((x * k1) * k2) * k3。
猜你喜欢
  • 2011-07-01
  • 2011-09-22
  • 2016-07-07
  • 2018-02-19
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多