PyTorch 一维卷积神经网络(1D CNN)实现及维度错误解决

这篇文章介绍如何使用 PyTorch 实现一个简单的一维卷积神经网络 (1D CNN),并提供解决常见维度错误 RuntimeError: Expected 3-dimensional input 的方法。

1D CNN 模型定义

以下代码展示了一个简单的 1D CNN 模型:pythonimport torch.nn as nn

class CNN(nn.Module): def init(self): super(CNN, self).init() self.conv1 = nn.Sequential( nn.Conv1d(1, 5, kernel_size=3, stride=1, padding=1), nn.Mish() ) # ... 其他卷积层 ... self.conv8 = nn.Sequential( nn.Conv1d(35, 40, kernel_size=3, stride=1, padding=1), nn.Mish() ) self.avgpool = nn.AvgPool1d(kernel_size=2, stride=1) self.global_avgpool = nn.AdaptiveAvgPool1d(1) self.fc = nn.Linear(40, 6) self.softmax = nn.Softmax(dim=1) self.loss_fn = nn.CrossEntropyLoss()

def forward(self, x):        x = self.conv1(x)        x = self.avgpool(x)        # ... 其他卷积和池化层 ...        x = self.conv8(x)        x = self.global_avgpool(x)        x = x.view(x.size(0), -1)        feature = x        x = self.fc(x)        output = self.softmax(x)        return feature, output

维度错误 'RuntimeError: Expected 3-dimensional input'

在使用 1D CNN 时,经常会遇到 RuntimeError: Expected 3-dimensional input for 3-dimensional weight [5, 1, 3], but got 4-dimensional input of size [100, 1, 10000, 12] instead 这样的错误信息。

原因:

这个错误是因为输入数据的维度与模型预期的维度不匹配。1D CNN 的 nn.Conv1d 层期望输入数据的维度是三维的:(batch_size, channels, length),其中:

  • batch_size:批次大小* channels:通道数 * length:序列长度

而错误信息显示,你输入数据的维度是四维的 [100, 1, 10000, 12],比预期多了一个维度。

解决方法:

根据错误信息,你的输入数据大小是 [100, 1, 10000, 12],其中最后一个维度 12 看起来是多余的。你可以使用 torch.squeeze() 函数去除维度为 1 的维度,将输入数据的维度调整为 [100, 1, 10000]

将以下代码添加到 forward() 函数的开头即可:pythonx = x.squeeze(3)

其他解决方法:

  • 检查数据预处理过程,确保输入数据的维度正确。* 根据实际情况,调整模型的输入通道数 in_channels,使其与输入数据的通道数一致。

通过以上方法,你就可以解决 PyTorch 1D CNN 中常见的维度错误问题

PyTorch 一维卷积神经网络(1D CNN)实现及维度错误解决

原文地址: https://www.cveoy.top/t/topic/czZF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录