Pytorch如何实现自定义数据集
这篇文章主要介绍了Pytorch如何实现自定义数据集,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
第一步、导入需要的包
importos importscipy.ioassio importnumpyasnp importtorch importtorch.nnasnn importtorch.backends.cudnnascudnn importtorch.optimasoptim fromtorch.utils.dataimportDataset,DataLoader fromtorchvisionimporttransforms,utils fromtorch.autogradimportVariable
batchSize=128#batchsize的大小 niter=10#epoch的最大值
第二步、构建神经网络
设神经网络为如上图所示,输入层4个神经元,两层隐含层各4个神经元,输出层一个神经。每一层网络所做的都是线性变换,即y=W×X+b;代码实现如下:
classNeuralnetwork(nn.Module): def__init__(self,in_dim,n_hidden_1,n_hidden_2,out_dim): super(Neuralnetwork,self).__init__() self.layer1=nn.Linear(in_dim,n_hidden_1) self.layer2=nn.Linear(n_hidden_1,n_hidden_2) self.layer3=nn.Linear(n_hidden_2,out_dim) defforward(self,x): x=x.view(x.size(0),-1) x=self.layer1(x) x=self.layer2(x) x=self.layer3(x) returnx model=Neuralnetwork(1*3,4,4,1) print(model)#netarchitecture
Neuralnetwork( (layer1):Linear(in_features=3,out_features=4,bias=True) (layer2):Linear(in_features=4,out_features=4,bias=True) (layer3):Linear(in_features=4,out_features=1,bias=True) )
第三步、读取数据
自定义的数据为demo_SBPFea.mat,是MATLAB保存的数据格式,其存储的内容如下:包括fea(1000*3)和sbp(1000*1)两个数组;fea为特征向量,行为样本数,列为特征宽度;sbp为标签
classSBPEstimateDataset(Dataset): def__init__(self,ext='demo'): data=sio.loadmat(ext+'_SBPFea.mat') self.fea=data['fea'] self.sbp=data['sbp'] def__len__(self): returnlen(self.sbp) def__getitem__(self,idx): fea=self.fea[idx] sbp=self.sbp[idx] """ConvertndarraystoTensors.""" return{'fea':torch.from_numpy(fea).float(), 'sbp':torch.from_numpy(sbp).float() } train_dataset=SBPEstimateDataset(ext='demo') train_loader=DataLoader(train_dataset,batch_size=batchSize,#分批次训练 shuffle=True,num_workers=int(8))
整个数据样本为1000,以batchSize = 128划分,分为8份,前7份为104个样本,第8份则为104个样本。在网络训练过程中,是一份数据一份数据进行训练的
第四步、模型训练
#优化器,Adam optimizer=optim.Adam(list(model.parameters()),lr=0.0001,betas=(0.9,0.999),weight_decay=0.004) scheduler=optim.lr_scheduler.ExponentialLR(optimizer,gamma=0.997) criterion=nn.MSELoss()#lossfunction iftorch.cuda.is_available():#有GPU,则用GPU计算 model.cuda() criterion.cuda() forepochinrange(niter): losses=[] ERROR_Train=[] model.train() fori,datainenumerate(train_loader,0): model.zero_grad()#首先提取清零 real_cpu,label_cpu=data['fea'],data['sbp'] iftorch.cuda.is_available():#CUDA可用情况下,将Tensor在GPU上运行 real_cpu=real_cpu.cuda() label_cpu=label_cpu.cuda() input=real_cpu label=label_cpu inputv=Variable(input) labelv=Variable(label) output=model(inputv) err=criterion(output,labelv) err.backward() optimizer.step() losses.append(err.data[0]) error=output.data-label+1e-12 ERROR_Train.extend(error) MAE=np.average(np.abs(np.array(ERROR_Train))) ME=np.average(np.array(ERROR_Train)) STD=np.std(np.array(ERROR_Train)) print('[%d/%d]Loss:%.4fMAE:%.4fMeanError:%.4fSTD:%.4f'%( epoch,niter,np.average(losses),MAE,ME,STD))
[0/10]Loss:18384.6699MAE:135.3871MeanError:-135.3871STD:7.5580 [1/10]Loss:17063.0215MAE:130.4145MeanError:-130.4145STD:7.8918 [2/10]Loss:13689.1934MAE:116.6625MeanError:-116.6625STD:9.7946 [3/10]Loss:8192.9053MAE:89.6611MeanError:-89.6611STD:12.9911 [4/10]Loss:2979.1340MAE:52.5410MeanError:-52.5279STD:15.0930 [5/10]Loss:599.7094MAE:22.2735MeanError:-19.9979STD:14.2069 [6/10]Loss:207.2831MAE:11.2394MeanError:-4.8821STD:13.5528 [7/10]Loss:189.8173MAE:9.8020MeanError:-1.2357STD:13.7095 [8/10]Loss:188.3376MAE:9.6512MeanError:-0.6498STD:13.7075 [9/10]Loss:186.8393MAE:9.6946MeanError:-1.0850STD:13.6332
感谢你能够认真阅读完这篇文章,希望小编分享的“Pytorch如何实现自定义数据集”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!
推荐阅读
-
Pytorch中model.eval()的作用是什么
Pytorch中model.eval()的作用是什么这篇文章主要介...
-
怎么使用pytorch读取数据集
-
pytorch中的view()函数怎么使用
pytorch中的view()函数怎么使用这篇文章主要介绍了pyt...
-
PyTorch中的torch.cat怎么用
PyTorch中的torch.cat怎么用这篇文章主要介绍PyTo...
-
pytorch中的hook机制是什么
pytorch中的hook机制是什么本篇内容介绍了“pytorch...
-
pytorch中的广播语义是什么
pytorch中的广播语义是什么这篇文章主要介绍“pytorch中...
-
PyTorch梯度下降反向传播实例分析
-
python中的Pytorch建模流程是什么
python中的Pytorch建模流程是什么小编给大家分享一下py...
-
pytorch如何实现多项式回归
-
pytorch怎样实现线性回归