Torch 中Dataset 和Dataloader 的数据变换
数据文件:test.csv
df = pd.read_csv('test.csv')
print(df)
a b c d
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
6 7 8 9 10
7 2 3 4 5
8 3 4 5 6
9 4 5 6 7
def create_inout_sequences(input_data, window_size):
inout_seq = []
L = len(input_data)
for i in range(L - window_size):
train_seq = input_data[i:i + window_size]
if (i + window_size+1) > len(input_data):
break
else:
train_label = input_data[:,-1][i + window_size:i + window_size+1]
inout_seq.append((train_seq, train_label))
return inout_seq
inout_seq = create_inout_sequences(df.values,window_size=3)
print(inout_seq)
inout_seq:
[(array([[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6]]), array([7])),
(array([[2, 3, 4, 5],
[3, 4, 5, 6],
[4, 5, 6, 7]]), array([8])),
(array([[3, 4, 5, 6],
[4, 5, 6, 7],
[5, 6, 7, 8]]), array([9])),
(array([[4, 5, 6, 7],
[5, 6, 7, 8],
[6, 7, 8, 9]]), array([10])),
(array([[ 5, 6, 7, 8],
[ 6, 7, 8, 9],
[ 7, 8, 9, 10]]), array([5])),
(array([[ 6, 7, 8, 9],
[ 7, 8, 9, 10],
[ 2, 3, 4, 5]]), array([6])),
(array([[ 7, 8, 9, 10],
[ 2, 3, 4, 5],
[ 3, 4, 5, 6]]), array([7]))]
class Dataset(Dataset):
def __init__(self, sequences):
self.sequences = sequences
def __len__(self):
return len(self.sequences)
def __getitem__(self, index):
sequence, label = self.sequences[index]
return torch.Tensor(sequence), torch.Tensor(label)
train_dataset = Dataset(inout_seq)
train_set:
tensor([[1., 2., 3., 4.],
[2., 3., 4., 5.],
[3., 4., 5., 6.]])
tensor([7.])
tensor([[2., 3., 4., 5.],
[3., 4., 5., 6.],
[4., 5., 6., 7.]])
tensor([8.])
tensor([[3., 4., 5., 6.],
[4., 5., 6., 7.],
[5., 6., 7., 8.]])
tensor([9.])
tensor([[4., 5., 6., 7.],
[5., 6., 7., 8.],
[6., 7., 8., 9.]])
tensor([10.])
tensor([[ 5., 6., 7., 8.],
[ 6., 7., 8., 9.],
[ 7., 8., 9., 10.]])
tensor([5.])
tensor([[ 6., 7., 8., 9.],
[ 7., 8., 9., 10.],
[ 2., 3., 4., 5.]])
tensor([6.])
tensor([[ 7., 8., 9., 10.],
[ 2., 3., 4., 5.],
[ 3., 4., 5., 6.]])
tensor([7.])
train_loader = DataLoader(train_dataset, batch_size=3, shuffle=False, drop_last=True)
train_loader:
tensor([[[1., 2., 3., 4.],
[2., 3., 4., 5.],
[3., 4., 5., 6.]],
[[2., 3., 4., 5.],
[3., 4., 5., 6.],
[4., 5., 6., 7.]],
[[3., 4., 5., 6.],
[4., 5., 6., 7.],
[5., 6., 7., 8.]]])
tensor([[7.],
[8.],
[9.]])
tensor([[[ 4., 5., 6., 7.],
[ 5., 6., 7., 8.],
[ 6., 7., 8., 9.]],
[[ 5., 6., 7., 8.],
[ 6., 7., 8., 9.],
[ 7., 8., 9., 10.]],
[[ 6., 7., 8., 9.],
[ 7., 8., 9., 10.],
[ 2., 3., 4., 5.]]])
tensor([[10.],
[ 5.],
[ 6.]])
train_loader = DataLoader(train_dataset, batch_size=4, shuffle=False, drop_last=True)
train_loader:
tensor([[[1., 2., 3., 4.],
[2., 3., 4., 5.],
[3., 4., 5., 6.]],
[[2., 3., 4., 5.],
[3., 4., 5., 6.],
[4., 5., 6., 7.]],
[[3., 4., 5., 6.],
[4., 5., 6., 7.],
[5., 6., 7., 8.]],
[[4., 5., 6., 7.],
[5., 6., 7., 8.],
[6., 7., 8., 9.]]])
tensor([[ 7.],
[ 8.],
[ 9.],
[10.]])
后面的数据小于batch_size,舍弃了