Torch 中Dataset 和Dataloader 的資料變換

华小电發表於2024-08-25

資料檔案: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,捨棄了

相關文章