AutoKeras (오토케라스) - 케라스 신경망 구조 탐색(Neural Architecture Search) 프레임워크
AutoKeras는 텍사스 A&M 대학의 DATA 연구소에서 개발된 케라스 기반의 AutoML 시스템입니다. "Auto-keras: An efficient neural architecture search system."라는 논문이 2019년에 ACM에서 발표되면서 github에 공개가 되었습니다. AutoKeras의 목표는 모든 사람이 기계 학습에 접근할 수 있도록 하는 것입니다. AutoKeras는 베이지안 최적화를 통해 효율적인 신경 구조 검색을위한 네트워크 형태를 유도 할 수있는 새로운 프레임워크입니다. 이 프레임워크는 검색 공간을 효율적으로 탐색하기 위해 신경망 커널과 트리 구조의 추천 함수 최적화 알고리즘을 개발했습니다. 추천함수는 현재 입력된 값과 확률적 추정 결과값을 바탕으로, 찾고자하는 이상적인 최적의 상태를 찾는데 있어서 다음으로 시험해볼 입력값을 추천해주는 함수입니다. AugoKeras는 아직 pre-relase 버전임에도 불구하고 많은 관심을 받고 있습니다. 코드도 정말 간단합니다.
!pip install --upgrade tensorflow !pip install --upgrade tensorflow-cpu !pip install autokeras
AutoKeras는 pip 명령어를 통해 설치할 수 있습니다. 텐서플로우 2.1 버전 이상을 요구하고 있기 때문에, 필요한 경우 텐서플로우를 업그레이드해줍니다.
import autokeras as ak clf = ak.ImageClassifier() clf.fit(x_train, y_train) results = clf.predict(x_test)
이 코드하나면 이미지 분류델을 학습하고 예측합니다. (데이터를 불러오는 부분은 생략되어있습니다.)
현재 지원되는 기능으로는 이미지 분류, 이미지 회귀, 텍스트 분류, 텍스트 회귀, 구조적 데이터 분류, 구조적 데이터 회귀가 있습니다. 아직 지원되지 않지만 개발중인 기능으로는 시계열 예측, 객체 검출, 이미지 세그멘테이션이 있습니다.
위 코드를 활용하여 MNIST 데이터셋으로 이미지 분류 예제를 한번 실행해봅시다.
import autokeras as ak from tensorflow.keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() clf = ak.ImageClassifier(max_trials=10) clf.fit(x_train, y_train) predicted_y = clf.predict(x_test) print(clf.evaluate(x_test, y_test))
매우 코드가 간단하죠? 이전에 아무리 간단한 모델이라고 할지라도, MNIST를 해결하기 위해 짜야했던 코드에 비하면 매우 간단합니다.
이렇게 간단하게 된다는 것보다 우리가 관심이 있는, 탐색 공간을 설정하는 것을 해봅시다. ImageClassifer는 AutoKeras 개발자들이 이미지 분류에 적합하다고 생각하는 탐색 공간을 설정하고 모델 아키텍처를 탐색하는 것입니다. AutoModel을 사용하면 탐색 공간을 직접 정의하여 탐색하게 할 수 있습니다.
import autokeras as ak input_node = ak.ImageInput() output_node = ak.ImageBlock(block_type='resnet', normalize=True, augment=False)(input_node) output_node = ak.ClassificationHead()(output_node) clf = ak.AutoModel(inputs=input_node, outputs=output_node, max_trials=10) clf.fit(x_train, y_train)
이미지를 다루는 입력 레이어는 ImageInput을 이용해 만들 수 있습니다. 그리고 분류에 사용할 레이어들을 학습할 ImageBlock 클래스를 만들어 줍니다. 여기서는 ResNet의 구조를 갖는 ImageBlock을 만들었습니다. max_trials는 모델을 찾는 횟수입니다. 10으로 입려개주면 10번의 모델 탐색을 거쳐 최적의 모델을 찾아냅니다. ImageBlock을 입력 레이어와 출력 레이어에 연결을 해주고, AutoKeras의 입력과 출력으로 연결하면 모델이 완성됩니다. 모델 인스턴스의 fit 함수를 이용해 학습을 합니다.
IMDB 영화 리뷰 감정 분석 예제 입니다. 텍스트 데이터를 이용해 긍정과 부정의 데이터를 분류해야하기 때문에, AutoKeras의 TextClassifier 클래스를 사용합니다.
import tensorflow as tf import autokeras as ak def imdb_raw(): max_features = 20000 index_offset = 3 # word index offset (x_train, y_train), (x_test, y_test) = tf.keras.datasets.imdb.load_data( num_words=max_features, index_from=index_offset) x_train = x_train y_train = y_train.reshape(-1, 1) x_test = x_test y_test = y_test.reshape(-1, 1) word_to_id = tf.keras.datasets.imdb.get_word_index() word_to_id = {k: (v + index_offset) for k, v in word_to_id.items()} word_to_id["<PAD>"] = 0 word_to_id["<START>"] = 1 word_to_id["<UNK>"] = 2 id_to_word = {value: key for key, value in word_to_id.items()} x_train = list(map(lambda sentence: ' '.join( id_to_word[i] for i in sentence), x_train)) x_test = list(map(lambda sentence: ' '.join( id_to_word[i] for i in sentence), x_test)) x_train = np.array(x_train, dtype=np.str) x_test = np.array(x_test, dtype=np.str) return (x_train, y_train), (x_test, y_test) # Prepare the data. (x_train, y_train), (x_test, y_test) = imdb_raw() print(x_train.shape) # (25000,) print(y_train.shape) # (25000, 1) print(x_train[0][:50]) # <START> this film was just brilliant casting <UNK> # Initialize the TextClassifier clf = ak.TextClassifier(max_trials=3) # Search for the best model. clf.fit(x_train, y_train) # Evaluate on the testing data. print('Accuracy: {accuracy}'.format(clf.evaluate(x_test, y_test)))
타이타닉 생존자 예측 문제에 대한 예제입니다. 타이타닉 생존자 예측 문제의 데이터셋은 구조화된, 정형 데이터입니다. 이러한 데이터를 이용한 분류 문제를 풀기위한 AutoKeras의 클래스는 StructuredDataClassifier입니다. 이 클래스를 이용해 데이터셋에 적합한 모델을 검색할 수 있습니다.
import autokeras as ak # Initialize the classifier. clf = ak.StructuredDataClassifier(max_trials=30) # x is the path to the csv file. y is the column name of the column to predict. clf.fit(x='titanic/train.csv', y='survived') # Evaluate the accuracy of the found model. print('Accuracy: {accuracy}'.format( accuracy=clf.evaluate(x='titanic/eval.csv', y='survived')))
'📚 딥딥러닝 > Concepts' 카테고리의 다른 글
Reformer - 트랜스포머(Transformer)를 발전시킨 Re(trans)former (0) | 2020.02.11 |
---|---|
모바일넷(MobileNet), 나스넷(NASNet), 아메바넷(AmoebaNet) - (0) | 2020.02.07 |
AutoML의 대표작: 신경망 아키텍쳐 탐색(Neural Architecture Search; NAS) (0) | 2020.01.31 |
딥러닝에서 바닐라 모델(Vanilla Model)과 베이스라인 모델(Baseline Model) [설명/요약/정리] (0) | 2020.01.13 |
Attention Mechanism (Jointly Learning to Align and Translate) [설명/요약/정리] (0) | 2020.01.09 |
댓글
이 글 공유하기
다른 글
-
Reformer - 트랜스포머(Transformer)를 발전시킨 Re(trans)former
Reformer - 트랜스포머(Transformer)를 발전시킨 Re(trans)former
2020.02.11트랜스포머를 통해서 자연어처리는 한단계, 아니 몇단계 성장했지만, 그 한계와 단점도 존재합니다. 가장 대표적인 것은 다음과 같습니다. 1. 어텐션 기반 모델이 갖는 메모리 문제 2. 트랜스포머 (기반) 모델이 정말 강인한가? 이 문제를 자세히 알아보기위해 먼저 트랜스포머를 살펴보도록 합시다. Reformer의 저자는 트랜스포머의 메모리 문제를 지적하였습니다. 그 부분들을 위 그림에서는 안경으로 표시했습니다. (위 레퍼런스에 자세히 설명되어있습니다.) 1. 검정 안경: attention 연산 길이 L의 시퀀스에 대한 어텐션 연산은 시간과 메모리 복잡도에서 모두 O(L²)이다. 시퀀스의 길이가 6만 4천이라고 한다면, 40억 정도 됩니다…. 2. 빨간 안경: 많은 레이어 역전파를 위해 각 레이어의 활성화를… -
모바일넷(MobileNet), 나스넷(NASNet), 아메바넷(AmoebaNet) -
모바일넷(MobileNet), 나스넷(NASNet), 아메바넷(AmoebaNet) -
2020.02.07인공신경망은 수많은 연구를 통해 모델의 아키텍쳐가 결정됩니다. 문제에 따라 맞는 방식으로 연구자들의 패턴인식과 경험을 통해 최적의 아키텍쳐를 찾아냅니다. 그 아키텍쳐 내에서 파라미터가 학습되고, 인공지능의 한 기술로서 문제를 해결합니다. 그런데 한 걸음 더 나아가서, 인공신경망의 구조까지도 학습을 통해 찾아내는 접근법으로 나아갔습니다. 그 대표적인 신경망 세개를 살펴보고자 합니다. 1. MobileNet MobileNet은 모바일 및 임베디드 시스템 어플리케이션을 위하여 제안되었습니다. MobileNet은 깊이 분리가 가능한 간소화 아키텍처를 사용하여 경량 심층 신경망을 구축합니다. 시간과 정확도 사이를 효율적으로 교환하는 두 가지 간단한 전역 하이퍼파라미터를 이용해 사용자가 제한 시간을 조건으로 모델 … -
AutoML의 대표작: 신경망 아키텍쳐 탐색(Neural Architecture Search; NAS)
AutoML의 대표작: 신경망 아키텍쳐 탐색(Neural Architecture Search; NAS)
2020.01.31AutoML? 딥러닝에서는 인공신경망이 특징을 발견하고 추출하는 "패턴"을 찾아내는 것을 직접 학습하였습니다. 데이터셋을 학습하기에 적합한 형태로 만들기 위해 전처리, 데이터 분석, 특징 공학 등을 수행합니다. 그리고 모델링도 여러 각도에서 실험해보고, 거기서 최적의 파라미터를 찾기위해 노력합니다. AutoML은 이러한 것들도 자동화할 수 없을까 라는 생각에서 출발하였습니다. AutoML은 데이터셋으로부터 모델을 학습하고, 배포하여 예측하는 그 전체 파이프라인을 자동화하는 것입니다. 이를통해 비전문가가 기계 학습 모델과 기술을 활용할 수 있는 것을 기대합니다. (내 밥그릇….) 일반적인 머신러닝에서는 데이터셋을 학습하기에 적합한 형태로 만들기 위해 전처리, 데이터 분석, 특징 공학 등을 수행합니다. 그… -
딥러닝에서 바닐라 모델(Vanilla Model)과 베이스라인 모델(Baseline Model) [설명/요약/정리]
딥러닝에서 바닐라 모델(Vanilla Model)과 베이스라인 모델(Baseline Model) [설명/요약/정리]
2020.01.13딥러닝/인공신경망에 관련된 문서나 논문을 읽다보면 vanilla model이라는 단어가 나올 때가 있습니다. 특히 Kaggle과 같이 기준이 되는 base model이 제안되고, 고득점을 하기 위해, 그리고 성능을 높이기 위해 모델이 자주 변형되는 경우에 많이 사용됩니다. 아이스크림을 생각해봅시다. 가장 기본적인 아이스크림 맛은 무엇인가요? 바닐라입니다! (어떤 분에겐 우유나 초코일수도….) 따라서, 가장 '순수한' 상태의 모델을 바닐라 모델이라고 합니다. 예를들어서 ResNet-50 이라는 모델이 있다고 했을 때, 그 안에서 변형될 수 있는 요소는 매우 많습니다! 그 오리지널의 상태가 바닐라 모델입니다. 그럼 바닐라 모델은 어떨 때 사용될까요? 1. 어떤 모델을 사용할지 결정하기 위해서 연구/개발 초…
댓글을 사용할 수 없습니다.