PyTorch 一维卷积神经网络(1D CNN)实现及维度错误解决
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 中常见的维度错误问题
原文地址: https://www.cveoy.top/t/topic/czZF 著作权归作者所有。请勿转载和采集!