【Pytorch】从0开始的数据集制作,从numpy数组到Dataset,再到Dataloader
所需import的库
import torch
import numpy as np
from torch.utils.data import Dataset, DataLoader
import matplotlib.pyplot as plt
1.首先收集想要解决问题的场景下的数据,这里我是自己生成了一组数据(1000个点的sin函数带有噪声)
'''
首先生成一个sin函数,作为伪时间序列数据
'''
T = 1000
x = torch.arange(1, T + 1, dtype=torch.float32)
y = torch.sin(0.01 * x) + torch.normal(0, 0.1, (T,))#每个y加上一个0到0.2(左闭右开)的噪声
plt.plot(x, y)
plt.show()
数据绘制的图为:
2.我的场景是利用序列的前8个数,预测第9个数,所以在上面数据的基础之上,我要自己切分数据,形成数据集的基本特点(features-target对)
def data_prediction(data, num_features):
'''
准备数据集的函数
'''
features, target = [], []
for i in range(len(data)-num_features):
f = data[i:i+num_features]
t = data[i+num_features]
features.append(list(f))
target.append(t)
return np.array(features), np.array(target)
下面就是直接调用写好的函数,返回features和target数据包
'''
第一步,创建好数据集,即对应好训练数据与目标数据#
我们的目标是用前面序列前面八个值的大小预测第9个值
第一条feature-target应该为 features:(y0, y1, y2...,y7),target:(y8)
最后一条feature-target应该为 features:(y991, y992, y993...,y998),target:(y999)
'''
dataset_features, dataset_target = data_prediction(y, 8)
3.数据集的拆分,我是精确地拆成了四个数组,分别是训练集的特征,训练集的target,测试集的特征,测试集的target
def dataset_split(data_features, data_target, ratio=0.8):
'''
功能:训练集与测试集的特征与target分离
ratio:表示训练集所占的百分比
'''
split_index = int(ratio*len(data_features))
train_features = data_features[:split_index]
train_target = data_target[:split_index]
test_features = data_features[split_index:]
test_target = data_target[split_index:]
return train_features, train_target, test_features, test_target
然后将步骤2的输出调用拆分成我们需要的几个数据包: