[딥러닝 스터디] 케라스(Keras) 실습

[딥러닝 스터디] 케라스(Keras) 실습

다음의 책을 공부하며 정리한 내용입니다.

케라스 공식문서

딥러닝 라이브러리 케라스의 사용법을 익히고 실제 RNN모델을 설계해본다. 케라스는 딥러닝을 도와주는 파이썬 라이브러리이다.

케라스 훑어보기

전처리 도구

keras.preprocessing.text.Tokenizer()

: 토큰화, 정수 인코딩에 사용

  • 사용 예시
1
keras.preprocessing.text.Tokenizer(num_words=None, filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n', lower=True, split=' ', char_level=False, oov_token=None, document_count=0)
  • 모든 문장부호/구두점 삭제
  • 공백 기준 토큰화
  • 0은 reserved idx로 어떤 단어에도 부여되지 않는다.

각 Argument의 의미는 아래와 같다.

  • num_words : Integer. 사용할 단어집합의 최대 크기 지정. Num_words - 1 words will be kept.
  • filters : String. 텍스트에서 걸러낼 문자집합. 걸러내는 기본값은 모든 문장부호(punctuations), 탭, 개행이다.( ‘ 제외)
  • lower : Boolean. 텍스트를 소문자로 변환할지 여부
  • split : String. 단어 분리에 사용할 seperator.
  • char_level : Boolean. True인 경우 모든 글자가 토큰으로 간주된다(Char RNN)
  • oov_token : 값을 주게 되면, 해당 값은 단어집합에 없는 단어를 대체할 word_index가 된다.

pad_sequence()

: 각 샘플(= 각 문장)은 길이가 다르다. 모델의 입력으로 동일한 크기의 샘플을 넣기 위해, 모든 샘플의 길이를 동일하게 맞춰준다.

  • 정해준 길이보다 길이가 긴 샘플은 일부를 자른다
  • 정해준 길이보다 길이가 짧은 샘플은 값을 0으로 채워준다.

해당 함수는 num_samples 길이의 시퀀스 리스트(num_samples, num_timesteps)의 2차원 텐서로 변환한다.

1
keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32', padding='pre', truncating='pre', value=0.0)

각 Argument의 의미는 아래와 같다

  • sequences : List of lists. 예를들어 [[1, 2, 3], [3, 4, 5, 6], [7, 8]]. 각각의 element는 시퀀스이다.
  • maxlen : Int. 시퀀스들 중 최대길이. 주어지지 않으면 자동으로 가장 긴 시퀀스 길이가 사용된다.
  • padding : String. 어느위치에 패딩할 것인지 정한다. 시퀀스 앞 or 뒤? pre나 post를 넣어준다.
  • truncating : String. 시퀀스 길이가 maxlen보다 길 경우 어느 위치에서 자를 것인지 정한다. 마찬가지로 pre나 post를 넣어준다.

반환 자료형은 다음과 같다.

  • x : Numpy array => (len(sequences), maxlen)

워드 임베딩

Embedding()

: 텍스트 내의 positive integers들을 밀집벡터의 형태로 변환한다. 임베딩 과정을 통해 만들어진 밀집벡터를 임베딩 벡터라고 부르기도 한다.

eg. [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]

임베딩 벡터는 랜덤값에서 시작하여 인공신경망의 가중치가 학습됨에 따라 값이 학습되게 된다.

모델의 첫번째 층 레이어로 사용할 수 있다.

1
keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)

글자 단위 RNN(Char RNN)

: 입출력의 단위가 글자인 RNN을 케라스로 구현하여 언어모델의 훈련/테스트 과정을 이해한다.

댓글