Pytorch 神经网络—自定义数据集上实现教程

 更新时间:2020-01-07 22:11:13   作者:佚名   我要评论(0)

第一步、导入需要的包


import os
import scipy.io as sio
import numpy as np
import torch
import torch.nn as nn
import torch.backends.cudnn as cudnn
import

第一步、导入需要的包

import osimport scipy.io as sioimport numpy as npimport torchimport torch.nn as nnimport torch.backends.cudnn as cudnnimport torch.optim as optimfrom torch.utils.data import Dataset, DataLoaderfrom torchvision import transforms, utilsfrom torch.autograd import Variable
batchSize = 128 # batchsize的大小niter = 10   # epoch的最大值 

第二步、构建神经网络

设神经网络为如上图所示,输入层4个神经元,两层隐含层各4个神经元,输出层一个神经。每一层网络所做的都是线性变换,即y=W×X+b;代码实现如下:

class Neuralnetwork(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)   def forward(self, x):    x = x.view(x.size(0), -1)    x = self.layer1(x)    x = self.layer2(x)    x = self.layer3(x)    return x model = Neuralnetwork(1*3, 4, 4, 1) print(model) # net architecture
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为标签

class SBPEstimateDataset(Dataset):   def __init__(self, ext='demo'):      data = sio.loadmat(ext+'_SBPFea.mat')    self.fea = data['fea']    self.sbp = data['sbp']      def __len__(self):        return len(self.sbp)   def __getitem__(self, idx):     fea = self.fea[idx]    sbp = self.sbp[idx]    """Convert ndarrays to Tensors."""    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() # loss function  if torch.cuda.is_available(): # 有GPU,则用GPU计算   model.cuda()    criterion.cuda()  for epoch in range(niter):    losses = []    ERROR_Train = []    model.train()    for i, data in enumerate(train_loader, 0):      model.zero_grad()# 首先提取清零      real_cpu, label_cpu = data['fea'], data['sbp']       if torch.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: %.4f MAE: %.4f Mean Error: %.4f STD: %.4f' % (    epoch, niter, np.average(losses), MAE, ME, STD))   
   ​​[0/10] Loss: 18384.6699 MAE: 135.3871 Mean Error: -135.3871 STD: 7.5580[1/10] Loss: 17063.0215 MAE: 130.4145 Mean Error: -130.4145 STD: 7.8918[2/10] Loss: 13689.1934 MAE: 116.6625 Mean Error: -116.6625 STD: 9.7946[3/10] Loss: 8192.9053 MAE: 89.6611 Mean Error: -89.6611 STD: 12.9911[4/10] Loss: 2979.1340 MAE: 52.5410 Mean Error: -52.5279 STD: 15.0930[5/10] Loss: 599.7094 MAE: 22.2735 Mean Error: -19.9979 STD: 14.2069[6/10] Loss: 207.2831 MAE: 11.2394 Mean Error: -4.8821 STD: 13.5528[7/10] Loss: 189.8173 MAE: 9.8020 Mean Error: -1.2357 STD: 13.7095[8/10] Loss: 188.3376 MAE: 9.6512 Mean Error: -0.6498 STD: 13.7075[9/10] Loss: 186.8393 MAE: 9.6946 Mean Error: -1.0850 STD: 13.6332​ 

果博东方以上这篇Pytorch 神经网络—自定义数据集上实现教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • pytorch 自定义数据集加载方法
  • pytorch中的自定义数据处理详解
  • PyTorch上实现卷积神经网络CNN的方法
  • PyTorch上搭建简单神经网络实现回归和分类的示例

果博东方相关的文章

  • Pytorch 神经网络—自定义数据集上实现教程

    Pytorch 神经网络—自定义数据集上实现教程

    第一步、导入需要的包import osimport scipy.io as sioimport numpy as npimport torchimport torch.nn as nnimport torch.backends.cudnn as cudnnimport
    2020-01-07
  • Matplotlib绘制雷达图和三维图的示例代码

    Matplotlib绘制雷达图和三维图的示例代码

    1.雷达图程序示例'''1.空白极坐标图'''import matplotlib.pyplot as plt plt.polar()plt.show() '''2.绘制一个极坐标点'''import numpy as npim
    2020-01-07
  • Mysql8.0使用窗口函数解决排序问题

    Mysql8.0使用窗口函数解决排序问题

    MySQL窗口函数简介MySQL从8.0开始支持窗口函数,这个功能在大多商业数据库和部分开源数据库中早已支持,有的也叫分析函数。什么叫窗口?窗口的概念非常重要,
    2020-01-07
  • 浅谈Python访问MySQL的正确姿势

    浅谈Python访问MySQL的正确姿势

    Py2 时代,访问 MySQL 数据库的模块除了 PyMySQL 和 MySQL-python 之外,还有以速度见长的 Umysql,以及非常小众的 Oursql 模块。进入了 Py3 时代之后,PyMySQL 与时
    2020-01-07
  • Java实现按比抽奖功能

    Java实现按比抽奖功能

    需求是要做几个小游戏的抽奖功能,需要根据不同的游戏有不同的抽奖规则,其中也有很多共性,可归纳为只按奖品占比抽取、奖品占比与奖品数量抽取、分段抽取,为方便起
    2020-01-07
  • 详解vmware14Pro中ubuntu系统界面太小的问题解决

    详解vmware14Pro中ubuntu系统界面太小的问题解决

    1.操作环境vmware14Proubuntu 16.04LTS2.问题描述在使用vmware14Pro安装ubuntu 16.04LTS系统后,屏幕始终比较小,无法根据vmware的变化而变化。3.问题原因
    2020-01-07
  • python全局变量引用与修改过程解析

    python全局变量引用与修改过程解析

    这篇文章主要介绍了python全局变量引用与修改过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下一、引
    2020-01-07
  • pytorch加载自定义网络权重的实现

    pytorch加载自定义网络权重的实现

    在将自定义的网络权重加载到网络中时,报错:AttributeError: 'dict' object has no attribute 'seek'. You can only torch.load from a file that is seekable. P
    2020-01-07
  • python enumerate内置函数用法总结

    python enumerate内置函数用法总结

    这篇文章主要介绍了python enumerate内置函数用法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 enu
    2020-01-07
  • python模拟实现斗地主发牌

    python模拟实现斗地主发牌

    题目:趣味百题之斗地主扑克牌是一种非常大众化的游戏,在计算机中有很多与扑克牌有关的游戏。例如,在Windows操作系统下自带的纸牌、红心大战等。在扑克牌类的游戏
    2020-01-07

最新评论