((유의)) 직접 검색해서 이해한 내용만 정리한 것이므로 틀린 부분이 있을 수 있습니다! (지적해주시면 감사하겠습니다.)
모델의 하이퍼파라미터를 최적화 하려면, 보통 데이터 엔지니어의 직관 또는 최적화 라이브러리를 사용한다고 한다.
(직관이라니.)
케라스를 이용하여 데이터를 학습 및 예측 하다가 학습률, 감쇄율, 배치사이즈 등의 파라미터를 로또 번호맞추는 느낌으로 맞추고 있는 나자신을 발견하고, 하이퍼파라미터 최적화 라이브러리를 찾아봤다.
Keras + Hyperopt: A very simple wrapper for convenient hyperparameter optimization 라고 소개되어 있다.
(readme.md 부터 예시가 아주 친절하다.)
https://github.com/maxpumperla/hyperas
여기서도 다운로드 가능하다.
http://maxpumperla.com/hyperas/
hyperas의 구조
data() : 데이터를 읽어오고 전처리하여 입력과 출력을 리턴한다. (학습용 입출력, 검증용 입출력 총 4개를 리턴)
model() : 모델 구조와 하이퍼파라미터를 지정하고 학습한다.
optim.minimize() : data()와 model()을 반복 수행하여 최적의 파라미터를 알려준다. max_evals로 시도 횟수를 지정할 수 있다.
hyperas의 동작 흐름
main함수에서 optim.minimize() 의 Trials()가 실행되어 data()와 model()이 반복적으로 수행된다.
사용법
기존 프로젝트에 hyperas의 함수들을 끼워넣어 시험하려고 했었지만 실패했다. (ㅠㅠ...)
main함수, data(), model()만 있는 테스트 모듈을 따로 만들어서 시험하니까 동작했다.
hyperas에서 파라미터 시험을 위해 uniform() 과 choice()를 제공한다.
시험하려는 값들의 리스트를 choice 함수 안에 입력할 수 있다.
{{ 를 이용하는 것이 특이하다.
배치사이즈의 경우, 결과값은 batch_size = 0 이런식인데, 리스트의 인덱스가 리턴된다고 보면 된다.
위 코드의 경우, best batch_size는 1440이다.
또는 시험하려는 수치 범위를 uniform 내에 입력할 수 있다.
0에서 1 사이의 값에서 시도해보자는 뜻이다.
실행해보면, {{ 로 감싸진 부분들이 def get_space() 의 변수로 들어가는 것을 콘솔에서 확인할 수 있다.
위의 변수를 통해 최종 결과로 무엇이 나올 지 미리 알수 있다.
새롭게 알게된 내용이 있으면 추가해 놓을 예정이다.
혹시 도움이 되었다면 하트를 눌러주세요!
글 내용에 관한 의견은 댓글로 주시면 감사하겠습니다 :)
'알고리즘' 카테고리의 다른 글
3등의 성적은? (정렬 응용) (0) | 2020.05.30 |
---|---|
모두의 약수 (제한시간 1초) (0) | 2020.05.02 |
도전 프로그래밍2 - 5번문제 (0) | 2017.06.14 |
도전 프로그래밍2 - 3번문제 (0) | 2017.06.14 |
도전 프로그래밍2 - 2번문제 (0) | 2017.06.14 |