• RML2016调制识别


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 枫叶飘零77 2024-04-09 10:32 采纳率: 0% 浏览 5 首页/ 编程语言 / RML2016调制识别 python人工智能 ##问题描述使用RML 2016a进行调制识别是我的本科毕设内容。在做实验中,我发现我用torch搭建的和原作者相同的网络根本就无法训练。 ##可能的原因难道是tensorflow keras和torch不一样吗?我觉得应该不是呀 ##我用torch搭建的VIT-CNN2网络 class MyCNN1(nn.Module): def __init__(self): super(MyCNN1, self).__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, input): input = input.unsqueeze(dim=1) out = self.stage1(input) out = self.stage2(out) return out 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 码农阿豪 Java领域优质创作者 2024-04-09 10:33
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      问题分析: 根据提供的信息,无法确定问题具体原因。目前提供的网络模型代码缺少数据加载、损失函数、优化器等重要部分,可能也会对训练造成影响。 可能的解决方案:
      1. 确认数据加载、损失函数、优化器等代码是否正确,并尝试更改超参数进行训练。
      2. 查阅相关文献,确认网络结构是否正确,可参考其他已经实现的模型代码或论文。
      3. 检查数据集是否存在问题,例如数据质量、标签是否正确等。
      4. 尝试使用其他深度学习框架(例如tensorflow keras)进行搭建,并比较结果来确认问题来源。

      参考代码: 参考其他已经实现的RML2016a识别模型代码,例如“End-to-End Deep Learning of Cognitive Radio Networks: A Taxonomy and Survey”中的代码实现。同时,确认数据加载、损失函数、优化器等部分的正确实现。

      评论
    • CSDN-Ada助手 CSDN-AI 官方账号 2024-04-09 12:25
      关注

      【相关推荐】



      • 这篇博客: keras与pytorch搭建神经网络中的 使用torch搭建基本步骤核心代码实例 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
        import numpy as np
        import torch as t
        
        # 超参数
        num_epochs = 30  # 训练轮数
        learning_rate = 1e-3  # 学习率
        batch_size = 100  # 批量大小
        
        ####### 训练部分
        
        # 创建网络框架
        class FirstCnnNet(t.nn.Module):  # CNN网络
            def __init__(self, num_classes):  # 初始化只需要输出这一个参数
                super(FirstCnnNet, self).__init__()  # 固定格式
                self.conv1 = t.nn.Sequential(
                    t.nn.Conv2d(1, 16, kernel_size=5, stride=2, padding=2),
                    t.nn.BatchNorm2d(16),
                    t.nn.ReLU())  # 输入深度1,输出深度16。从1,28,28压缩为16,14,14
                self.conv2 = t.nn.Sequential(
                    t.nn.Conv2d(16, 32, kernel_size=5, stride=2, padding=2),
                    t.nn.BatchNorm2d(32), t.nn.ReLU(),
                    t.nn.MaxPool2d(kernel_size=2,
                                   stride=1))  # 输入深度16,输出深度32。16,14,14压缩到32,6,6
                self.dense1 = t.nn.Sequential(
                    t.nn.Linear(6 * 6 * 32, 128), t.nn.ReLU(),
                    t.nn.Dropout(p=0.25))  # 第1个全连接层,输入6*6*32,输出128
                self.dense2 = t.nn.Linear(128, num_classes)  # 第2个全连接层,输入128,输出10类
        
            def forward(self, x):  # 传入计算值的函数,真正的计算在这里
                x = self.conv1(x)  # 16,14,14
                x = self.conv2(x)  # 32,6,6
                x = x.view(x.size(0), -1)
                x = self.dense1(x)  # 32*6*6 -> 128
                x = self.dense2(x)  # 128 -> 10
                return x
         # 输入28*28,隐藏层128,输出10类,创建定义一个实例框架,执行__init__()
        model = FirstCnnNet(10)  # 后面的model(),都是执行的 forward函数
        optimizer = t.optim.Adam(model.parameters(), lr=learning_rate)  # 优化器仍然选随机梯度下降
        
        X_train_size = len(X_train)
        
        for epoch in range(num_epochs):
            print('Epoch:', epoch)  # 打印轮次:
        
            X = t.autograd.Variable(t.from_numpy(X_train))
            y = t.autograd.Variable(t.from_numpy(y_train))
        
            i = 0
            while i < X_train_size:
                X0 = X[i:i + batch_size]  #取一个新批次的数据
                X0 = X0.view(-1, 1, 28, 28)
                y0 = y[i:i + batch_size]
                i += batch_size
        
                # 正向传播
                out = model(X0)  # 用神经网络计算10类输出结果
                loss = t.nn.CrossEntropyLoss()(out, y0)  # 计算神经网络结果与实际标签结果的差值
        
                # 反向梯度下降
                optimizer.zero_grad()  # 清空梯度
                loss.backward()  # 根据误差函数求导
                optimizer.step()  # 进行一轮梯度下降计算
        
            print(loss.item())
        
        ############## 验证部分
        
        model.eval()  ## 将模型设为验证模式
        
        X_val = t.autograd.Variable(t.from_numpy(X_test))
        y_val = t.autograd.Variable(t.from_numpy(y_test))
        
        X_val = X_val.view(-1, 1, 28, 28)  # 整形成CNN需要的输入
        
        out_val = model(X_val)  ## 用训练好的模型计算结果
        loss_val = t.nn.CrossEntropyLoss()(out_val, y_val)
        
        print(loss_val.item())
        
        _, pred = t.max(out_val, 1)  # 求出最大的元素的位置
        num_correct = (pred == y_val).sum()  # 将预测值与标注值进行对比
        
        print(num_correct.data.numpy() / len(y_test))  # 显示正确率
        
        

      如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

      展开全部

      评论
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-15 23:02
      关注

      晚上好🌙🌙🌙
      本答案参考ChatGPT-3.5

      问题描述:

      使用RML 2016a进行调制识别是我的本科毕设内容。在做实验中,使用torch搭建的和原作者相同的网络无法训练。

      可能的原因:

      难道是tensorflow keras和torch不一样吗?应该不是呀?

      解决方案:

      1. 调整输入数据的格式,确保与原作者的输入数据格式相同。

      2. 如果网络难以收敛,可以尝试更改网络结构或超参调整,如增加网络层数、减少学习率等。

      3. 可以尝试预训练网络,以提高网络的泛化性能。

      4. 可以参考原作者在其他框架中的代码实现,了解网络细节并进行对比。

      修改后的代码:

      为确保输入数据格式与原作者相同,需要将输入数据从(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
      

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    signal
    大学阶段总结
    【IEEE2017】RL:机器人库:一种面向对象的机器人应用程序的方法
    出差学知识No1:制作一个shell脚本在正式命令执行前运行
    湖科大计网:传输层
    java175-method类反射机制
    创新案例分享 | 建设高校科研管理信息系统,助力提升信息化实际效能
    php设计模式之策略模式详解
    .NET 采用 SkiaSharp 生成二维码和图形验证码及图片进行指定区域截取方法实现
    【毕业季|进击的技术er】工作七年的职场人,不希望你们再走弯路
  • 原文地址:https://ask.csdn.net/questions/8085525