赞
踩
Pytorch作为一个深度学习的框架,在学术界的使用已经很广泛了,我们现在来介绍一下如何把numpy的数据转化为Pytorch的Tensor,不懂Tensor的小伙伴可以自行百度一下。
我这里简单介绍一下Tensor其实和Numpy的nparray基本上是一个事情,只不过我们的Tensor是我们Pytorch需要的数据类型,而且Pytorch所有的计算都是基于Tensor的,我们可以把它叫做张量,同时有的小伙伴也会把它叫做高维矩阵。这里不多重复。
我们说一下重点,在Meachine Learning中,我们处理数据,我们一般都会在DataFrame,nparray这两个数据结构里面进行,当我们训练深度学习模型的时候才会用到Pytorch,这个时候我们需要把数据转化为Tensor,那么如何转化,当然直接使用
torch.from_numpy()
这段代码是没有毛病的,而且我们多数时候也是这样转换的,但是当我们需要训练数据,通过每个min_batch的方式进行训练的时候我们这样转化的方式就是不对的,这样把所有的数据都转换为张量了我们还需要自己去切分Batch,当然你自己手动切分Batch是可以的,我也没说不行,但是,切分的代码,你都有可能写错,这样的话对后面的训练的影响是很大的,所以Pytorch官方推荐使用Dataset包装数据,使用DataLoader加载数据。
- from sklearn.model_selection import train_test_split
- import torch.nn as nn
- import torch
- from torch.utils.data import Dataset
- from torch.utils.data import DataLoader
-
- #切分训练数据和测试数据
- X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3,train_size=0.7,random_state=42)
-
- #使用torch.from_numpy 把数据转化为numpy
- x_train_tensor = torch.from_numpy(X_train).float()
- y_train_tensor = torch.from_numpy(y_train).float()
- #自己定义DataSet继承自torch.utils.data的DataSet
- class AirDataSet(Dataset):
- def __init__(self,x_tensor,y_tensor):
- self.x = x_tensor
- self.y = y_tensor
- def __getitem__(self, index):
- return(self.x[index], self.y[index])
- def __len__(self):
- return len(self.x)
- #放入数据 这样就是实现了数据的加载
- train_data = AirDataSet(x_train_tensor, y_train_tensor)
-
- #定义DataLoader加载器
- #有两个超参数需要定义,一个是batch_size一个是shuffle
- #batch_size 代表我们每一批次取出多少个进行训练
- #shuffle 代表我们是否需要重新洗牌 随机选取
- epochs = 180
- batch_size = 25
- train_loader = DataLoader(dataset=train_data, batch_size=batch_size, shuffle=True)
-

接下来就是定义模型,训练数据,数据如何从DataLoader里面取出来,如下图所示,我们通过for直接就可以取出来每个Batch里面的数据。
- for epoch in range(epochs):
- train_loss = 0
- for batch_idx, (x_batch, y_batch) in enumerate(train_loader):
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。