python - 折叠连续的线性层
问题描述
我有一个具有 3 个连续线性层(卷积)的神经网络,中间没有激活函数。在训练网络并获得权重后,我想将所有 3 层折叠为一层。
当每一层都有不同的内核大小和步幅时,如何在实践中做到这一点?
图层如下:
- 具有 3x3 内核、5 个输入通道和 5 个输出通道(大小为 3x3x5x5 的张量)的卷积层,步幅为 1,填充“相同”
- 具有 5x5 内核、5 个输入通道和 50 个输出通道(大小为 5x5x5x50 的张量)的卷积层,步幅为 2,填充“相同”
- 具有 3x3 内核、50 个输入通道和 50 个输出通道(大小为 3x3x50x50 的张量)的卷积层,步长为 1,填充“相同”
提前致谢
解决方案
置换第一层内核的维度,使得输入通道处于“小批量”维度,输出通道处于“通道”维度。应用第二层,就好像那是一个图像。然后将第三层应用于结果。最终结果是“折叠”层的内核。
使用“完整”填充所有这些操作。如果这大致正确(除了填充),请尝试修复填充(可能它应该在最后一次操作中“相同”)。
推荐阅读
- reactjs - 现在是使用 React refs 的好时机吗?
- mysql - 使用 MySQL,我需要弄清楚如何获取两种数据类型(文本和日期)并以句子形式输出它们
- mysql - 选择已知日期范围内的行
- typescript - 为什么“let readIndex:0”不会导致 TypeScript 编译错误?
- octave - 如何修复:Octave 上的“匿名函数体必须是单个表达式”错误
- c++ - Vulkan.hpp Supbass 附件违反了验证层
- java - 在所有活动中共享数据的最佳方式是什么?
- unity3d - 如何通过一个图像目标随机显示多个视频
- python - 如何简化在 Pygames 中创建多个敌人?
- c - 如何从使用 fscanf 忽略标点符号的输入文件中读取单词?