가변 길이 입력 시퀀스에 대한 데이터 준비

딥러닝 라이브러리는 데이터를 벡터화하여 표현합니다.

가변 길이 시퀀스 예측 문제의 경우 각 시퀀스의 길이가 같도록 데이터를 변형해야합니다.

이 벡터화는 코드가 선택한 딥러닝 알고리즘에 대해 일괄적으로 행렬 연산을 수행 할 수있게합니다.

이 튜토리얼에서는 Keras가있는 Python에서 시퀀스 예측 문제에 대한 가변 길이 시퀀스 데이터를 준비하는 데 사용할 수 있는 기술을 살펴 봅니다.

이 자습서를 완료하면 다음 사항을 알 수 있습니다.

  • 가변 길이 시퀀스를 더미 값으로 채우는 방법.

  • 길이가 더 긴 새로운 길이로 가변 길이 시퀀스를 채우는 방법.

  • 가변 길이 시퀀스를 원하는 길이로 자르는 방법.

개요

이 섹션은 세 부분으로 나뉩니다.

  1. 부자연스러운 시퀀스 문제

  2. 시퀀스 패딩

  3. 시퀀스 자르기

환경

이 튜토리얼에서는 Python SciPy 환경이 설치되어 있다고 가정합니다. 이 예제에서는 Python 2 또는 3을 사용할 수 있습니다.

이 튜토리얼에서는 TensorFlow (v1.1.0 이상) 또는 Theano (v0.9 +) 백엔드 중 하나와 함께 Keras (v2.0.4 이상)를 설치했다고 가정합니다.

이 튜토리얼에서는 또한 Scikit-Learn, Pandas, NumPy 및 Matplotlib가 설치되어 있다고 가정합니다.

Python 환경을 설정하는 데 도움이 필요하면 이 게시물을 참조하십시오.

부자연스러운 시퀀스 문제

이 튜토리얼의 목적을 위해 간단한 시퀀스 문제를 고안 할 수 있습니다.

문제는 정수의 시퀀스로 정의됩니다. 다음과 같이 길이가 4에서 1 사이인 세 시퀀스가 ​​있습니다.

1, 2, 3, 4

1, 2, 3

1

이것은 파이썬에서 다음과 같이 목록 목록으로 정의 할 수 있습니다 (가독성을 위해 공백 포함).

sequences = [
[1, 2, 3, 4],
[1, 2, 3],
[1]
]

이 튜토리얼에서 시퀀스 패딩을 탐색하기위한 기초로이 시퀀스를 사용합니다.

시퀀스 패딩

Keras 심층 학습 라이브러리의 pad_sequences () 함수는 가변 길이 시퀀스를 채우기 위해 사용할 수 있습니다.

디폴트 패딩 값은 0.0이며, 이는 “value”인수를 통해 선호 값을 지정함으로써 변경할 수 있지만 대부분의 응용 프로그램에 적합합니다. 예 :

pad_sequences(…, value=99)

사전 또는 사후 순서 패딩이라고하는 시퀀스의 처음 또는 끝에 적용 할 패딩은 다음과 같이 “패딩”인수로 지정할 수 있습니다.

사전 시퀀스 패딩

사전 시퀀스 패딩이 기본값입니다 (패딩 = ‘사전’).

아래의 예는 3 개의 입력 시퀀스를 0으로 채우는 것을 보여줍니다.

from keras.preprocessing.sequence import pad_sequences
# define sequences
sequences = [
[1, 2, 3, 4],
[1, 2, 3],
[1]
]
# pad sequence
padded = pad_sequences(sequences)
print(padded)

예제를 실행하면 0개의 값이 선행된 3개의 시퀀스가 ​​인쇄됩니다.

[[1 2 3 4]
[0 1 2 3]
[0 0 0 1]

포스트 시퀀스 패딩

패딩은 시퀀스의 끝 부분에도 적용될 수 있으며 일부 문제 영역에 더 적합 할 수 있습니다.

post-sequence 패딩은 “패딩”인수를 “post”로 설정하여 지정할 수 있습니다.

from keras.preprocessing.sequence import pad_sequences
# define sequences
sequences = [
[1, 2, 3, 4],
[1, 2, 3],
[1]
]
# pad sequence
padded = pad_sequences(sequences, padding=’post’)
print(padded)

예제를 실행하면 0 시퀀스가 ​​추가된 동일한 시퀀스가 ​​인쇄됩니다.

[[1 2 3 4]
[1 2 3 0]
[1 0 0 0]]

패드 시퀀스 길이

pad_sequences () 함수는 관찰 된 시퀀스보다 긴 선호 길이로 시퀀스를 채우는 데 사용될 수도 있습니다.

이것은 “maxlen”인수를 원하는 길이로 지정하여 수행 할 수 있습니다. 다음과 같이 원하는 길이를 얻기 위해 모든 시퀀스에서 패딩이 수행됩니다.

from keras.preprocessing.sequence import pad_sequences
# define sequences
sequences = [
[1, 2, 3, 4],
[1, 2, 3],
[1]
]
# pad sequence
padded = pad_sequences(sequences, maxlen=5)
print(padded)

예제를 실행하면 관찰된 시퀀스의 최대 길이가 단지 4 timesteps 임에도 불구하고 각 시퀀스를 원하는 5 길이의 시간 간격으로 채 웁니다.

[[0 1 2 3 4]
[0 0 1 2 3]
[0 0 0 0 1]]

시퀀스 자르기

시퀀스 길이는 원하는 길이로 자를 수도 있습니다.

시퀀스의 원하는 길이는 “maxlen”인수를 사용하여 timesteps 수로 지정할 수 있습니다.

시퀀스를 잘리는 두 가지 방법이 있습니다 : 시퀀스의 시작이나 끝에서 타임 스텝을 제거합니다.

사전 시퀀스 절단

기본 절단 방법은 시퀀스 시작 부분에서 시간 단계를 제거하는 것입니다. 이를 사전 순서 절단 (pre-sequence truncation)이라고합니다.

아래의 예는 원하는 길이의 시퀀스를 2로 자릅니다.

from keras.preprocessing.sequence import pad_sequences
# define sequences
sequences = [
[1, 2, 3, 4],
[1, 2, 3],
[1]
]
# truncate sequence
truncated= pad_sequences(sequences, maxlen=2)
print(truncated)

예제를 실행하면 첫 번째 시퀀스의 처음 두 타임 스텝, 두 번째 시퀀스의 첫 번째 타임 스텝이 제거되고 최종 시퀀스가 ​​제거됩니다.

[[3 4]
[2 3]
[0 1]]

포스트 시퀀스 절단

시퀀스의 끝에서 타임 스텝을 제거하여 시퀀스를 트리밍 할 수도 있습니다.

이 접근법은 일부 문제 영역에서 더 바람직 할 수 있습니다.

post-sequence truncation은 다음과 같이 “truncating”인수를 기본 ‘pre’에서 ‘post’로 변경하여 구성 할 수 있습니다.

from keras.preprocessing.sequence import pad_sequences
# define sequences
sequences = [
[1, 2, 3, 4],
[1, 2, 3],
[1]
]
# truncate sequence
truncated= pad_sequences(sequences, maxlen=2, truncating=’post’)
print(truncated)

예제를 실행하면 첫 번째 시퀀스의 마지막 두 타임 스텝, 두 번째 시퀀스의 마지막 타임 스텝이 제거되고 마지막 시퀀스가 ​​다시 채워집니다.

[[1 2]
[1 2]
[0 1]]

정리

이 튜토리얼에서는 Python에서 시퀀스 예측 문제와 함께 사용하기 위해 가변 길이 시퀀스 데이터를 준비하는 방법을 살펴 보았습니다. 특히, 다음을 배웠습니다.

  • 가변 길이 시퀀스를 더미 값으로 채우는 방법.

  • 가변 길이 시퀀스를 새로운 원하는 길이로 패딩하는 방법.

  • 가변 길이 시퀀스를 원하는 길이로 자르는 방법.

원문 : http://machinelearningmastery.com/data-preparation-variable-length-input-sequences-sequence-prediction/