PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
22.02k stars 5.54k forks source link

搭建CNN模型,dropout层报错 #32289

Closed JJYjackson closed 1 year ago

JJYjackson commented 3 years ago

X = [] lbl = [] print('信噪比为:',snrs) print('调制模式为:',mods) 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) #垂直(按照行顺序)的把数组给堆叠起来 print(X.shape) print(lbl[0:5])

对数据进行分区 数据集划分 60%/20%/20%

n_examples = X.shape[0] n_train = int(n_examples * 0.7) #训练集的数量 train_idx = np.random.choice(range(0, n_examples), size=n_train, replace=False)

测试集=验证集

test_idx = list(set(range(0,n_examples))-set(train_idx)) EsNoArray = [] for idx in test_idx: EsNoArray.append(lbl[idx][1]) EsNoArray = np.reshape(EsNoArray, len(EsNoArray)) print(EsNoArray)

X_train = X[train_idx] X_test = X[test_idx] row = 2 col = 128 X_train = np.asarray(list(map(lambda x: np.reshape(x, (row, col, 1)), X_train))) #将列表转换为数组 ??? 对列表可以进行reshape X_test = np.asarray(list(map(lambda x: np.reshape(x, (row, col, 1)), X_test)))

print('训练集的shape为:{}'.format(X_train.shape)) print('测试集的shape为:{}'.format(X_test.shape))

Y_train = list(map(lambda x: mods.index(lbl[x][0]), train_idx)) Y_train_snrs = list(map(lambda x: snrs.index(lbl[x][1]), train_idx))

Y_test = list(map(lambda x: mods.index(lbl[x][0]), test_idx)) Y_test_snrs = list(map(lambda x: snrs.index(lbl[x][1]), test_idx))

in_shp = list(X_train.shape[1:])

print(Y_train[0:10], Y_train_snrs[0:10])

数据集自定义

In[5]:

数据集自定义

import paddle.vision.transforms as T

class MR_dataset(paddle.io.Dataset): """ 步骤一:继承paddle.io.Dataset类 """ def init(self, mode: str ='train'): """ 步骤二:实现构造函数,定义数据读取方式 """ super(MR_dataset, self).init()

    self.mode = mode
    self.transforms = T.ToTensor()

    if self.mode  == 'train':
        self.data = X_train
        self.label = Y_train

    elif self.mode == 'test':
        self.data = X_test
        self.label = Y_test

    # self.transforms = T.ToTensor()   # 数据的格式转换和标准化 HWC => CHW  

def __getitem__(self, index):
    """
    步骤三:实现__getitem__方法,定义指定index时如何获取数据,并返回单条数据(训练数据,对应的标签)
    """
    data = np.array(self.data[index], dtype='float32')
    data = self.transforms(data)

    label = np.array(self.label[index], dtype='int64')

    return data, label

def __len__(self):
    """
    步骤四:实现__len__方法,返回数据集总数目
    """
    return len(self.data)

实例化数据集

In[6]:

train_dataset = MR_dataset(mode='train') print(train_dataset[0][0].shape) print(train_dataset[0][1], train_dataset[0][1].shape, len(train_dataset)) print('**') test_dataset = MR_dataset(mode='test') print(test_dataset[0][0].shape) print(test_dataset[0][1], len(test_dataset))

In[7]:

model_CNN1 = cnn1()

In[8]:

model_senet154

model_CNN1 = paddle.Model(model_CNN1) model_CNN1.summary((None, 1, 2, 128))

mods = ['8PSK', 'AM-DSB', 'AM-SSB', 'BPSK', 'CPFSK', 'GFSK', 'PAM4', 'QAM16', 'QAM64', 'QPSK', 'WBFM']

snrs = [-20, -18, -16, -14, -12, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

paddle-bot-old[bot] commented 3 years ago

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档常见问题历史IssueAI社区来寻求解答。祝您生活愉快~

Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the APIFAQGithub Issue and AI community to get the answer.Have a nice day!

frankwhzhang commented 3 years ago

请问这是自己的代码还是官方提供的

JJYjackson commented 3 years ago

请问这是自己的代码还是官方提供的

您好这是我自己的代码,希望大佬能帮我看看是什么问题?