[python] 파이썬 PyTorch에서 제로 패딩과 패드 패딩을 사용하는 방법은?

파이썬과 PyTorch를 사용하여 제로 패딩(zero padding)과 패드 패딩(pad padding)을 적용하는 방법을 알아보겠습니다. 이러한 패딩 기법은 시퀀스 데이터의 길이를 일정하게 맞추기 위해 사용됩니다.

제로 패딩

제로 패딩은 시퀀스의 길이를 맞추기 위해 추가되는 패딩 값으로, 0으로 채워진 패딩 값을 사용합니다. 이는 주로 시퀀스 데이터를 다루는 자연어 처리나 음성 인식 작업에서 사용됩니다.

import torch
from torch.nn.utils.rnn import pad_sequence

sequences = [torch.tensor([1, 2, 3]), torch.tensor([4, 5]), torch.tensor([6, 7, 8, 9])]
padded_sequences = pad_sequence(sequences, batch_first=True)

print(padded_sequences)

위의 예시 코드에서는 pad_sequence 함수를 사용하여 제로 패딩된 시퀀스를 생성합니다. sequences는 패딩되지 않은 시퀀스의 리스트입니다. pad_sequence 함수는 batch_first=True로 설정하여 배치 차원을 첫 번째 차원으로 설정합니다.

출력 결과는 다음과 같습니다:

tensor([[1, 2, 3, 0],
        [4, 5, 0, 0],
        [6, 7, 8, 9]])

위의 예시에서는 각 시퀀스의 길이를 맞추기 위해 0으로 패딩이 추가되었습니다.

패드 패딩

패드 패딩은 제로 패딩과 다르게 시퀀스의 길이를 맞추지 않고, 제로가 아닌 다른 패딩 값으로 패딩을 채웁니다. 이는 시퀀스 데이터에서 제로 값이 의미를 가지는 경우 제로 패딩 대신 사용될 수 있습니다.

import torch
from torch.nn.utils.rnn import pad_sequence

sequences = [torch.tensor([1, 2, 3]), torch.tensor([4, 5]), torch.tensor([6, 7, 8, 9])]
padding_value = -1  # 패딩 값으로 사용할 값 설정
padded_sequences = pad_sequence(sequences, batch_first=True, padding_value=padding_value)

print(padded_sequences)

위의 예시 코드에서는 padding_value-1로 설정하여 패딩 값으로 사용하였습니다.

출력 결과는 다음과 같습니다:

tensor([[ 1,  2,  3, -1],
        [ 4,  5, -1, -1],
        [ 6,  7,  8,  9]])

각 시퀀스의 길이를 맞추지 않고 패딩이 추가되었으며, 패딩 값으로 -1이 사용되었습니다.

이상으로 파이썬 PyTorch에서 제로 패딩과 패드 패딩을 사용하는 방법에 대해 알아보았습니다. pad_sequence 함수를 사용하여 다양한 패딩 기법을 적용할 수 있으며, 패딩 값은 사용하는 데이터에 맞게 설정하시면 됩니다.

참고 사항: