晚上好🌙🌙🌙
本答案参考ChatGPT-3.5
问题描述:
使用RML 2016a进行调制识别是我的本科毕设内容。在做实验中,使用torch搭建的和原作者相同的网络无法训练。
可能的原因:
难道是tensorflow keras和torch不一样吗?应该不是呀?
解决方案:
-
调整输入数据的格式,确保与原作者的输入数据格式相同。
-
如果网络难以收敛,可以尝试更改网络结构或超参调整,如增加网络层数、减少学习率等。
-
可以尝试预训练网络,以提高网络的泛化性能。
-
可以参考原作者在其他框架中的代码实现,了解网络细节并进行对比。
修改后的代码:
为确保输入数据格式与原作者相同,需要将输入数据从(batch_size, 2, 128)转换为(batch_size, 1, 2, 128),即在通道维度上增加一个维度。
import torch.nn as nn
class MyCNN1(nn.Module):
def init(self):
super().init()
self.pad = nn.ZeroPad2d((2, 2, 0, 0))
self.relu = nn.ReLU()
self.drop = nn.Dropout(p=0.5)
self.conv1 = nn.Conv2d(kernel_size=(1, 3), in_channels=1, out_channels=256, stride=(1, 1))
self.conv2 = nn.Conv2d(kernel_size=(2, 3), in_channels=256, out_channels=80)
self.flatten = nn.Flatten(start_dim=1, end_dim=-1)
self.fc1 = nn.Linear(10560, 256)
self.fc2 = nn.Linear(256, 11)
# 卷积部分
self.stage1 = nn.Sequential(
self.pad,
self.conv1,
self.relu,
self.drop,
self.pad,
self.conv2,
self.relu,
self.drop,
self.flatten
)
# 全连接部分
self.stage2 = nn.Sequential(
self.fc1,
self.relu,
self.drop,
self.fc2,
nn.Softmax(dim=1)
)
def forward(self, x):
# reshape the data to (batch_size, 1, 2, 128)
x = x.unsqueeze(1)
x = self.stage1(x)
x = self.stage2(x)
return x