PyTorch CNN 模型输入形状修改 - 适配 [100, 10000, 12] 数据
PyTorch CNN 模型输入形状修改 - 适配 [100, 10000, 12] 数据
本文将展示如何修改一个 PyTorch CNN 模型,使其能够接受输入形状为 [100, 10000, 12] 的数据。
原始模型:
import 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.conv2 = nn.Sequential(
nn.Conv1d(5, 10, 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):
# ... 前向传播过程
return feature, output
问题: 原始模型的输入形状为 [100, 1, 10000, 12],需要修改为 [100, 10000, 12],即去除第二个维度 1。
解决方案: 修改第一层卷积层的输入通道数,使其与新的输入形状匹配。
修改后的模型:
import torch.nn as nn
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Sequential(
nn.Conv1d(10000, 5, kernel_size=3, stride=1, padding=1),
nn.Mish()
)
self.conv2 = nn.Sequential(
nn.Conv1d(5, 10, 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):
# ... 前向传播过程
return feature, output
解释:
- 原始模型的
conv1层接受1个通道的输入,而新模型的conv1层接受10000个通道的输入,以匹配新的输入形状。 - 其他层保持不变。
注意: 在实际应用中,可能还需要根据具体情况对模型的其他部分进行调整,例如调整池化层的参数等。
经过修改后的模型就可以接受形状为 [100, 10000, 12] 的输入数据。
原文地址: https://www.cveoy.top/t/topic/c0Yt 著作权归作者所有。请勿转载和采集!