我正在尝试将使用Flatten
/Linear
作为最终层的模型转换为使用AdapativeAvgPool1d
/Linear
的全局池。全局池后线性层的输出维度会扰乱训练阶段。我收到以下错误:
ValueError: operands could not be broadcast together with shapes (64,4) (64,)
展平模型--〉线性(工程)
conv1d --> relu --> maxpool1d --> Flatten --> Linear
:
model = nn.Sequential(
nn.Conv1d(in_channels=1, out_channels=32, kernel_size=128, stride=16, padding=1),
nn.ReLU(),
nn.MaxPool1d(kernel_size=2, stride=2),
nn.Flatten(),
nn.LazyLinear(n_classes)
)
==========================================================================================
Layer (type:depth-idx) Output Shape Param #
==========================================================================================
Sequential -- --
├─Conv1d: 1-1 [64, 32, 505] 4,128
├─ReLU: 1-2 [64, 32, 505] --
├─MaxPool1d: 1-3 [64, 32, 252] --
├─Flatten: 1-4 [64, 8064] --
├─Linear: 1-5 [64, 4] 32,260
==========================================================================================
具有AdaptiveAvgPool1d的模型--〉线性(输出尺寸错误)
我希望此实现的输出与上一个实现的输出相匹配,其中Linear
图层的输出形状为[64,4]
model = nn.Sequential(
nn.Conv1d(in_channels=1, out_channels=32, kernel_size=128, stride=16, padding=1),
nn.ReLU(),
nn.MaxPool1d(kernel_size=2, stride=2),
nn.AdaptiveAvgPool1d(1),
nn.LazyLinear(n_classes)
)
==========================================================================================
Layer (type:depth-idx) Output Shape Param #
==========================================================================================
Sequential -- --
├─Conv1d: 1-1 [64, 32, 505] 4,128
├─ReLU: 1-2 [64, 32, 505] --
├─MaxPool1d: 1-3 [64, 32, 252] --
├─AdaptiveAvgPool1d: 1-4 [64, 32, 1] --
├─Linear: 1-5 [64, 32, 4] 8
==========================================================================================
1条答案
按热度按时间vqlkdk9b1#
您不能将nn.Flatten替换为nn.AdaptiveAvgPool1d,因为它们的作用不同。您仍需要在nn.AdaptiveAvgPool1d之后添加nn.Flatten()以获得相同的输出形状。