CodeOnWeb
로그인

[시작하기] FAQ

Keras에 대해 자주 묻는 질문과 그 답을 알아봅니다.

Kim Jeongmook 2017/08/18, 20:59

내용

Keras 레퍼런스 (37)

Keras 소개 [시작하기] Sequential 모델 가이드 [시작하기] 함수형 API 가이드 [시작하기] FAQ [모델] Keras의 모델 [모델] 함수형 API [모델] Sequential [계층] Keras의 계층 [계층] Core 계층 [계층] 합성곱 계층 [계층] 풀링 계층 [계층] 부분적으로 연결된 계층 [계층] 재발 계층 [계층] 임베딩 계층 [계층] Merge 계층 [계층] 고급 활성화 계층 [계층] 표준화 계층 [계층] 노이즈 계층 [계층] 계층 Wrappers [계층] 자신만의 Keras 계층 만들기 [전처리] 시퀀스 전처리 [전처리] 텍스트 전처리 [전처리] 이미지 전처리 Metrics 손실 최적화기 활성화 Callbacks 데이터셋 애플리케이션 백엔드 초기화기 정규화기 제한 시각화 Scikit-Learn API 유용한 도구

Keras FAQ: Keras에 대해 자주 묻는 질문들


Notice

CodeOnWeb에서는 따로 파이썬을 설치하지 않더라도 코드박스 아래의 실행 버튼을 클릭하여 바로 파이썬 코드를 실행해볼 수 있습니다. TensorFlow, Theano와 같은 백엔드 코드도 마찬가지로 설치 없이 실행 버튼만 눌러 실행할 수 있습니다. 'Keras 연습하기' 과정에서는 실행 결과까지 출력하는 예제 코드에 대해서만 실행하여 결과를 확인할 수 있도록 하였습니다.

Keras를 어떻게 인용하면 되죠?

Keras가 연구에 도움이 되었다면 당신의 저작물에 인용해 주세요. 예를 들어 BibTeX 양식으로는 다음과 같습니다:


GPU에서 Keras를 어떻게 돌릴 수 있죠?

TensorFlow나 CNTK 백엔드에서 돌리고 있는 경우에 사용 가능한 GPU가 감지된다면 코드는 자동으로 GPU에서 돌아갈 겁니다.

Theano 백엔드에서 돌리고 있는 경우에는 다음과 같은 방법을 사용하세요:

방법 1: Theano flags를 사용합니다.

'gpu'라는 이름은 당신의 기기의 식별자에 따라 변경해야 할 수도 있습니다(예를 들어, gpu0, gpu1, 등등).

방법 2: .theanorc를 설정하세요: 설정 방법

방법 3: 다음과 같이 코드의 시작 부분에 직접 theano.config.device, theano.config.floatX을 설정해 주세요:


"샘플", "batch", "epoch"가 무슨 뜻인가요?

다음은 Keras를 정확하게 이용하기 위해 제대로 알고 이해할 필요가 있는 일반적인 정의입니다:

  • 샘플: 데이터셋의 하나의 요소(element)입니다.
    • 예: 하나의 이미지는 합성곱 신경망(convolutional network)의 한 샘플 입니다.
    • 예: 하나의 음성 파일은 담화 인지(speech recognition) 모델의 한 샘플 입니다.
  • Batch: N개의 샘플의 세트입니다. 한 batch 안의 샘플들은 독립적이고 평행하게 처리됩니다. 훈련 중에는 한 batch는 모델에 한 번의 업데이트를 합니다.
    • Batch 는 일반적으로 개별 입력 보다 입력 데이터 전체의 분포를 더 근사합니다. Batch가 더 클 수록 더 잘 근사합니다. 하지만, batch는 처리에 시간이 더 걸리고 업데이트는 한 번 밖에 안 됩니다. 추론(평가/예측)에 있어서는, 메모리를 다 써버리지 않는 한도 내에서 최대한 batch 크기를 크게 하는 것을 추천합니다(보통 batch가 클 수록 평가나 예측이 더 빠릅니다).
  • Epoch: 임의의 끊어주기이며, 일반적으로 "전체 데이터셋에 대해 한 바퀴 돌기"로 정의됩니다. 훈련 과정을 단계별로 구분하여서 로깅과 주기적인 평가를 하는 데에 유용합니다.
    • Keras 모델의 fit 메소드와 evaluation_data 혹은 evaluation_split을 사용할 경우, 평가는 매 epoch의 끝에 수행됩니다.
    • Keras에서는 epoch의 끝에 특수하게 설계된 callbacks을 추가할 수 있습니다. 이러한 예는 학습율 변경 및 모델 체크포인트 저장 등 입니다.

Keras 모델을 어떻게 저장할 수 있나요?

전체 모델 저장하기/불러오기 (아키텍처 + 가중치 + 최적화기 상태)

Keras 모델을 저장하기 위해서는 pickle이나 cPickle을 사용하는 것을 추천합니다.

model.save(filepath)을 사용하여 Keras 모델을 다음과 같은 항목을 포함는 하나의 HDF5 파일에 저장할 수 있습니다:

  • 모델을 다시 만들 수 있도록 하는 모델의 아키텍처
  • 모델의 가중치
  • 훈련 구성 (손실, 최적화기)
  • 훈련을 중단한 그 시점 그대로 훈련을 재개할 수 있도록 하는 최적화기의 상태

모델을 다시 인스턴스화하기 위해 keras.models.load_model(filepath)을 사용할 수 있습니다. load_model은 저장된 훈련 구성을 사용하여 모델을 컴파일 할 수 있도록 합니다(원래의 모델이 컴파일된 적이 없지 않은 경우).

예제입니다:

모델의 아키텍처만 저장하기/불러오기

가중치나 훈련 구성은 빼고 모델의 아키텍처만 저장할 필요가 있을 때는, 다음과 같이 할 수 있습니다:

생성된 JSON / YAML 파일은 사람이 읽을 수 있고, 필요 시 직접 수성할 수 있습니다.

또한 이 데이터로 부터 다음과 같이 새로운 모델을 만들 수도 있습니다:

모델의 가중치만을 저장하기/불러오기

모델의 가중치만을 저장할 필요가 있을 때는, 아래와 코드와 같이 HDF5 형식으로 할 수 있습니다.

다만, HDF5와 파이썬 라이브러리 h5py는 Keras와 같이 설치되지 않으므로 별도로 설치하여야 한다는 점에 주의하세요.

모델을 인스턴스화하는 코드가 있다고 한다면, 저장한 가중치를 동일한 아키텍처를 가진 모델에 불러와 적용할 수 있습니다.

상세 조정이나 이전-학습(transfer-learning)의 경우와 같이 다른 아키텍처를 가진(하지만 몇 개의 공유하는 계층을 가지는) 모델에 저장한 가중치를 불러와 사용할 필요가 있다면, 계층 이름을 통해 가중치를 불러와 사용할 수 있습니다.

예제입니다:

저장된 모델의 사용자 지정 계층(혹은 다른 사용자 지정 객체) 다루기

불러오길 원하는 모델이 사용자 지정 계층이나 다른 사용자 지정 클래스, 함수 등을 포함하고 있다면, custom_objects 인수를 통해 불러오기 기능으로 넘길 수 있습니다:

대신에, CustomObjectScope을 사용할 수도 있습니다:

사용자 지정 객체는 load_model, model_from_json, model_from_yaml와 같은 방법으로 다룰 수 있습니다:


훈련 손실은 시험 손실보다 왜 훨씬 큰가요?

Keras 모델은 두 가지 모드가 있습니다: 훈련 모드와 시험 모드. 탈락(Dropout), L1/L2 가중치 정규화(L1/L2 weight regularization)와 같은 정규화(Regularization) 메커니즘은 시험 모드에서는 꺼집니다.

게다가 훈련 손실은 훈련 데이터의 각 batch별 손실의 평균입니다. 모델이 점차 변화해 가기 때문에 한 epoch의 첫 번째 batch의 손실은 일반적으로 마지막 batch에 비해 큽니다. 반면에 한 epoch의 시험 손실은 epoch의 종료 지점과 동일한 모델을 사용하기 때문에 손실이 더 적습니다.


중간 계층의 출력을 어떻게 얻을 수 있죠?

한 가지 쉬운 방법은 관심 있는 계층을 출력하는 새로운 Model을 만드는 것입니다:

또는 다음과 같이 어떤 입력에 대해 어떤 계층의 출력을 반환하는 Kears 함수를 만들 수도 있습니다:

유사하게, Theano와 TensorFlow 함수를 직접 만들 수도 있습니다.

모델이 훈련 모드와 시험 모드에서 다르게 동작하는 경우에(예를 들어 Dropout, BatchNormalization 등을 사용하는 경우), 다음과 같이 함수에 훈련 모드 플래그를 넘겨주어야 하는 것에 주의하세요:


메모리에 맞지 않는 데이터셋을 Keras에서 어떻게 사용할 수 있나요?

model.train_on_batch(x, y)model.test_on_batch(x, y)을 사용하여 batch 훈련을 할 수 있습니다. [모델] Sequential 강의를 참조하세요.

혹은 훈련 데이터 batch를 산출하는 생성기를 작성한 다음, model.fit_generator(data_generator, steps_per_epoch, epochs) 메소드를 사용할 수도 있습니다.

작동되는 batch 훈련 예제를 CIFAR10 예제에서 확인할 수 있습니다.


검증 손실이 더 이상 줄어들지 않을 때에 훈련 과정에 어떻게 개입할 수 있나요?

다음과 같이 EarlyStopping callback을 사용할 수 있습니다:

Callbacks 강의에서 좀 더 상세하게 알아볼 수 있습니다.


검증 비율은 어떻게 계산되나요?

예를 들어 model.fit의 인수 validation_split을 0.1로 설정하면, 전체 데이터의 마지막 10%가 검증 데이터로 사용됩니다. 0.25로 설정하면, 마지막 25%가 사용되는 식입니다. 검증 데이터를 추출하기 전에 데이터를 섞어주지 않는다면, 검증 데이터는 문자 그대로 전체 입력의 마지막 몇% 된다는 점에 주의하세요.

(같은 fit이 호출된 동안)모든 epoch에 대해서 동일한 검증 세트가 사용됩니다.


훈련 중 데이터는 섞이나요?

네, model.fit의 인수 shuffle을 (기본값인)True로 설정하면, 훈련 데이터는 매 epoch마다 무작위로 섞이게 됩니다.

검증 데이터는 섞이지 않습니다.


훈련 손실 / 검증 손실 / 정확도를 어떻게 매 epoch마다 기록할 수 있나요?

model.fit 메소드는 주욱 이어지는 손실과 다른 metrics을 포함하고 있는 history 속성을 가진 History callback을 반환합니다.


Keras 계층을 어떻게 "고정"할 수 있나요?

계층을 "고정" 한다는 것은 해당 계층을 훈련 과정에서 배제한다는 것으로 가중치를 업데이트하지 않는 것을 의미합니다. 모델을 상세 조정할 때나 텍스트 입력에 대해 고정된 임베딩을 사용할 때 유용합니다.

trainable 인수(부울)를 계층 생성자에 넘겨 계층을 훈련-불가능으로 설정할 수 있습니다:

추가로, 인스턴스화한 후에 계층의 trainable 속성을 True 혹은 False로 설정할 수 있습니다. 적용을 위해서는 trainable 속성을 수정한 뒤에 모델에 compile()을 호출해야 합니다. 예제입니다:


상태유지 재발 신경망(stateful RNNs)은 어떻게 사용할 수 있나요?

재발 신경망을 상태유지로 만든다는 것은 매 batch 샘플의 상태를 다음 batch 샘플의 초기 상태로 재사용한다는 의미입니다.

상태유지 재발 신경망을 사용할 때는 다음 사항을 가정합니다:

  • 모든 batche는 같은 갯수의 샘플을 가집니다.
  • x1x2가 연속된 batch 샘플이라 할 때, x2[i]는 모든 i에 대해서 x1[i]의 후속 시퀀스 입니다.

재발 신경망의 상태유지성을 사용하기 위해 다음 사항이 필요합니다:

  • 모델의 첫 번 째 계층에 batch_size 인수를 넘김으로서 사용하는 batch의 크기를 명확하게 지정해야 합니다. 예를 들어 매 시간단계마다 16개 feature이며 10개의 시간단계로 구성된 시퀀스의 32 샘플의 batch에 대해서는 batch_size=32를 지정해야 합니다.
  • 재발 신경망 계층에 stateful=True를 설정합니다.
  • fit()을 호출할 때 shuffle=False을 지정합니다.

축적된 상태를 리셋하려면 다음과 같이 합니다:

  • 모델의 모든 계층의 상태를 리셋하려면 model.reset_states()을 사용합니다.
  • 특정 상태유지 재발 신경망의 상태를 리셋하려면 layer.reset_states()을 사용합니다.

예제입니다:

Notes that the methods predict, fit, train_on_batch, predict_classes 등의 메소드는 모델의 모든 상태유지 계층의 상태를 업데이트한다는 점을 주의하세요. 이것은 상태유지 훈련 뿐만 아니라 상태유지 예측을 가능하게 합니다.


Sequential 모델에서 계층을 어떻게 제거할 수 있나요?

Sequential 모델에서 다음과 같이 .pop()을 호출하여 마지막으로 추가한 계층을 제거할 수 있습니다.:


Keras에서 미리 훈련된 모델을 어떻게 사용할 수 있나요?

다음과 같은 이미지 분류 모델에 대해서 코드와 미리 훈련된 가중치를 사용할 수 있습니다:

  • Xception
  • VGG16
  • VGG19
  • ResNet50
  • Inception v3

keras.applications 모듈에서 import 할 수 있습니다:

몇 개의 간단한 사용 예제를 애플리케이션 강의에서 확인할 수 있습니다.

Feature 추출이나 상세 조정 등을 위해 이렇게 미리 훈련된 모델을 사용하는 자세한 예제는 이 블로그의 게시물을 참조하세요.

VGG16 모델은 다음과 같은 몇 가지 Keras 예제의 기반이기도 합니다:


Keras에서 HDF5 입력을 어떻게 사용할 수 있나요?

keras.utils.io_utilsHDF5Matrix 클래스를 사용할 수 있습니다. HDF5Matrix에서 상세한 정보를 확인하세요.

다음과 같이 직접 HDF5 데이터셋을 사용할 수도 있습니다:


Keras 구성 파일은 어디에 저장되나요?

모든 Keras 데이터가 저장되는 기본 디렉토리는 다음과 같습니다:

Windows 사용자는 $HOME%USERPROFILE%로 변경해야 한다는 것에 주의하세요. Keras가 (권한 문제 등으로)위의 디렉토리를 생성할 수 없을 경우에는 /tmp/.keras/이 백업으로 사용됩니다.

Keras 구성 파일은 $HOME/.keras/keras.json에 저장된 JSON 파일입니다. 기본 구성 파일은 다음과 같이 생겼습니다:

다음과 같은 영역을 포함하고 있습니다:

  • 이미지 처리 계층과 도구에 기본값으로 사용될 이미지 데이터 양식(channels_last이나 channels_first).
  • 수치 표현에 있어서 0으로 나뉘어 지는 것을 방지하는 epsilon 값.
  • 기본 실수 데이터형.
  • 기본 백엔드. 백엔드 강의를 참조하세요.

비슷하게, get_file()을 통해 다운로드 받은 것과 같은 캐쉬된 데이터셋 파일은 기본적으로 $HOME/.keras/datasets/에 저장됩니다.


개발 중에 Keras를 사용하여 재현 가능한 결과를 어떻게 얻을 수 있나요?

모델 개발 중에는, 때때로 실행에 따른 성능의 개선이 실질적인 모델의 개선 혹은 데이터 변형에 의한 것인지 아니면 단순히 새로운 무작위 샘플에 의한 것인지를 확인하기 위해 재현 가능한 결과를 얻을 수 있다면 유용한 경우가 있습니다. 아래의 짧은 코드는 재현 가능한 결과를 얻는 방법의 한 예입니다. 파이썬3 환경에서 TensorFlow 백엔드를 사용하는 경우의 예제입니다:


6366 읽음
이전 [시작하기] 함수형 API 가이드
다음 [모델] Keras의 모델
목차

저자

토론이 없습니다

Please log in to leave a comment

16.5.11618.20190612.allo
문제 보고 · 사용조건 · 개인정보보호
래블업 주식회사 · 대한민국 서울 테헤란로 145 · 대표: 신정규 · 사업자번호: 864-88-00080 · +82 70-8200-2587

거절 확인

닫기
좋아요 책갈피 토론

아래 주소를 복사하세요