基于深度学习的自动调制识别技术(pytorch)

本科做的科研项目是基于深度学习的自动调制识别技术,在接触深度学习时,在数据处理、性能分析方面遇到了许多问题,此博客用于记录。

数据处理

import torch  # 导入PyTorch库
import pickle  # 导入pickle库
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import torch.optim as optim
import numpy as np
import torch.optim as optim
import torch.nn as nn
import torch.nn.functional as F
import torch, gc
import random
import matplotlib.pyplot as plt
from torch.utils.data import DataLoader, TensorDataset
from torchvision.utils import save_image
from torch.utils.data import Dataset
gc.collect()
torch.cuda.empty_cache()




def to_onehot(yy):
    yy1 = np.zeros([len(yy), max(yy) + 1])
    yy1[np.arange(len(yy)), yy] = 1
    return yy1



def setup_seed(seed):
    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)
    np.random.seed(seed)
    random.seed(seed)
    torch.backends.cudnn.deterministic = True
# 设置随机数种子
setup_seed(624)

def to_onehot(yy):
    yy1 = np.zeros([len(yy), max(yy) + 1])
    yy1[np.arange(len(yy)), yy] = 1
    return yy1

Xd = pickle.load(open("RML2016.10a_dict.pkl", 'rb'), encoding='latin')
snrs, mods = map(lambda j: sorted(list(set(map(lambda x: x[j], Xd.keys())))), [1, 0])
X = []
lbl = []
for mod in mods:
    for snr in snrs:
        X.append(Xd[(mod, snr)])
        for i in range(Xd[(mod, snr)].shape[0]):
            lbl.append((mod, snr))

X = np.vstack(X)

# 计算各部分数据集的比例
train_ratio = 0.4
val_ratio = 0.3
test_ratio = 0.3
# 设置随机种子

n_examples = X.shape[0]
n_train = int(n_examples * train_ratio)
n_val = int(n_examples * val_ratio)
n_test = n_examples - n_train - n_val

# 创建随机索引
idx = np.random.permutation(n_examples)

train_idx = idx[:n_train]
val_idx = idx[n_train:n_train+n_val]
test_idx = idx[n_train+n_val:]

# 划分数据集
X_train = X[train_idx]
X_val = X[val_idx]
X_test = X[test_idx]
print(X_train.shape)

trainy = list(map(lambda x: mods.index(lbl[x][0]), train_idx))
Y_train = torch.tensor(trainy)


valy = list(map(lambda x: mods.index(lbl[x][0]), val_idx))
valy = torch.tensor(valy)

testy = list(map(lambda x: mods.index(lbl[x][0]), test_idx))
testy = torch.tensor(testy)
X_train = torch.tensor(X[train_idx]).view(len(train_idx),1,2,128)
X_val = torch.tensor(X[val_idx]).view(len(val_idx),1,2,128)
X_test = torch.tensor(X[test_idx]).view(len(test_idx),1,2,128)
# 将维度从[𝑁,2,128]调整为[𝑁,1,2,128]
print(X_train.shape,Y_train.shape)
#数据归一化
print(testy[1024])

 将IQ数据归一化

切记,数据喂入网络前一定要进行归一化,刚开始学习时发现未对数据归一化,数据的分布差异较大,因此网络无法学习。

# 获得A/P特征
def toAP(iqdata):
    data = iqdata
    data = torch.sqrt(iqdata[:,:,0,:]**2+iqdata[:,:,1,:]**2)
    phase = torch.atan(iqdata[:,:,1,:]/iqdata[:,:,0,:])
    #增加一个维度
    data = data.un
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值