Keras Tuner 및 Hiplot을 사용한 신경망 하이퍼 파라미터 튜닝

신경망의 하이퍼 파라미터를 조정할 수있을뿐만 아니라 FAIR의 Hiplot을 사용하여 멋진 방식으로 튜닝 / 트레이닝 프로세스를 시각화하는 방법을 보여 드리고 싶습니다.

Unsplash에 Lukasz Szmigiel의 사진

배경 이야기

최근에 필드에서 기사를 스크롤하는 동안 FAIR의 Hiplot 릴리스 에 대한 뉴스를 접했습니다 . 고차원 데이터를 멋지고 쉽게 그릴 수있는 평행 플롯에 매료되었습니다. 설명에 모델의 학습 과정을 시각화하는 데 사용할 수 있다고 나와 있습니다. 그것이 내가 그것을 테스트하고 싶었던 것입니다. 하지만 Hiplot을 사용하여 모든 구조화 된 데이터로 작업 할 수도 있습니다.

Hiplot 문서의 예에는 시각화를위한 입력으로 사전이 있습니다. 실제 기록 데이터와 함께 사용하는 것에 대한 정보가 없습니다. 그래서 구체적인 사용 예는 시도해보고 싶은 사람들에게 유용 할 것이라고 생각했습니다. 이 게시물의 모든 코드는 jupyter 노트북 에서 사용할 수 있습니다 .

이 블로그 게시물에는 두 가지 주요 섹션이 있습니다.

  1. 훈련 이력 시각화
  2. 초 매개 변수 조정 및 시각화

종속성 설치 및 가져 오기

나는 현재 2.2.0-rc2의 tensorflow 버전이 설치된 Google Colab을 사용하여 코드를 작업했습니다.

!pip install hiplot
import tensorflow as tf
import hiplot as hip

컴퓨터 비전의 "Hello World"인 Fashion MNIST 데이터 세트를 사용 합니다.

# download data
mnist = tf.keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# define the input shape and normalise data
x_train=x_train.reshape(60000, 28, 28, 1)
x_train=x_train / 255.0
x_test = x_test.reshape(10000, 28, 28, 1)
x_test=x_test/255.0

두 개의 컨볼 루션 레이어, 최대 풀링 레이어, 드롭 아웃 및 조밀 한 레이어를 포함하는 간단한 모델을 구축합니다.

model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(64, (3,3), activation=’relu’, 
    input_shape=(28, 28, 1)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Conv2D(64, (3,3), activation=’relu’),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation=’relu’),
    tf.keras.layers.Dense(10, activation=’softmax’)
    ])

model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’])
# model.summary()
플롯은 Netron을 사용하여 만들어졌습니다.

일단 컴파일되면 모델을 학습하고 평가할 수 있습니다. 과거 훈련 데이터를 추출하는 데 사용할 변수를 선언합니다.

num_epochs = 20
history = model.fit(training_images, training_labels, epochs=num_epochs, validation_split=0.2)
model.evaluate(x_test, y_test)

마지막으로 우리는 블로그 포스트의 요점에 도달합니다. 이제 시각화를 해봅시다. jupyter 노트북에서 실행되는 동안 Hiplot은 입력 데이터가 파이썬 사전 형식이어야하므로 목록 이해를 사용하여 히스토리 데이터를 구문 분석하고 플로팅 할 수 있습니다.

import hiplot as hip
data = [{'epoch': idx,
    'loss': history.history['loss'][idx],
    'val_loss': history.history['val_loss'][idx],
    'accuracy': history.history['accuracy'][idx],
    'val_accuracy': history.history['val_accuracy'][idx]} 
    for idx in range(num_epochs)]
hip.Experiment.from_iterable(data).display()
visualising training process with FAIR’s Hilpot

초 매개 변수 조정 및 시각화

!pip install keras-tuner
from kerastuner import HyperModel
from kerastuner.tuners import RandomSearch

공식 문서는 튜너 자체에 대해 많은 것을 알려주지 않습니다. 그러나 아이디어는 하이퍼 매개 변수 값의 다양한 조합의 성능을 테스트하고 평가하는 것입니다.

우선 조정해야하는 각 매개 변수에 대한 모델과 검색 공간을 정의해야합니다. build_model 함수 또는 수행하려는 HyperModel 클래스를 사용하여이를 수행 할 수 있습니다.

class CNNHyperModel(HyperModel):
def __init__(self, input_shape, num_classes):
        self.input_shape = input_shape
        self.num_classes = num_classes
def build(self, hp):
        model = tf.keras.Sequential()
        model.add(tf.keras.layers.Conv2D(
        filters=hp.Choice('num_filters_1', values=[32, 64, 128], 
        default=64), activation='relu', kernel_size=3))
        model.add(tf.keras.layers.MaxPooling2D(pool_size=2))
...
hypermodel = CNNHyperModel(input_shape=(28, 28, 1), num_classes=10)

하이퍼 매개 변수 값의 다양한 조합을 검색하기 위해 RandomSearch 클래스를 사용 합니다. 그이면의 아이디어는 검색 공간에서 무작위로 값을 반복적으로 샘플링하고, 모델을 훈련시키고 성능을 테스트하여 최상의 조합을 선택하는 것입니다.

다음은 초 매개 변수 튜너에 대한 몇 가지 매개 변수입니다 (예).

max_epochs - 하나 개의 모델 훈련을 신 (新) 시대의 최대 수
max_trials를 최대 테스트에 대한 시험 (모델 구성)의 총 수 -
프로젝트 이름 - 의 이름 에 저장됩니다 시각화를위한 데이터 폴더

tuner = RandomSearch(
    hypermodel, 
    objective='val_accuracy', 
    seed=42, 
    max_trials=30, 
    executions_per_trial=2, 
    directory='random_search', 
    project_name='fashion_mnist'
    )

튜너의 경우 학습 중에 조기 중지를 사용하여 검색 시간을 줄이는 것이 좋습니다 (예 : 콜백을 통해).

callback = tf.keras.callbacks.EarlyStopping(monitor=’val_loss’, 
    patience=3)
tuner.search(training_images, training_labels, epochs=num_of_epochs, 
    validation_split=0.2, callbacks=[callback])
tuner.results_summary()

best_model = tuner.get_best_models(num_models=1)[0]
best_model.evaluate(x_test, y_test)

심상

다른 튜너처럼 RandomSearch는 우리가 시각화하려는 검색 기록 데이터와 함께 JSON 파일을 저장하는 프로젝트의 디렉토리에 폴더를 만듭니다. 우리가해야 할 일은 모든 파일을 구문 분석하고 데이터로 사전을 생성하는 것입니다. 이 방법은 이미했던 것과 거의 동일하므로 코드 에 대한 링크를 하나 더 남기고 결과 플롯을 보여줍니다.

Hiplot으로 플로팅 된 하이퍼 파라미터 튜닝 내역

이 정보는 예를 들어 정확도에 가장 큰 영향을 미치는 매개 변수에 대한 통찰력을 수집하는 데 도움이 될 수 있습니다. 그리고 튜닝 알고리즘의 후드 아래에서 원시 숫자 대신 멋진 플롯을 볼 수 있다는 것은 재미 있습니다.

이 작은 가이드가 누군가에게 유용하기를 바랍니다. 궁금한 점이 있으면 알려주세요. LinkedIn을 통해 저에게 연락 할 수도 있습니다.

Suggested posts

중요하지만 종종 간과되는 데이터 과학 및 분석 기술

중요하지만 종종 간과되는 데이터 과학 및 분석 기술

이제 데이터 과학 및 분석에 들어가는 데 필요한 기술 기술을 배울 수있는 방법이 그 어느 때보 다 많았습니다. 온라인 과정, Kaggle 대회, YouTube 자습서, 스택 오버플로가있는 금광 등이 있습니다. 현장에 침입하려는 사람들은 종종 "X 데이터 작업을 수행하려면 어떤 프로그래밍 기술이 필요한가요?", "어떤 기계 학습 기술을 배워야합니까?", "기술을 구축하려면 어떤 프로젝트를 수행해야합니까?"와 같은 질문을 자주합니다. / 포트폴리오?”.

Python으로 차트 주석 자동 생성

Python으로 차트 주석 자동 생성

따라서 매일 업데이트되는 최신의 아름다운 대화 형 대시 보드를 만들었으며 이제 경영진은 로그인하여 자신이 원할 때마다 판매 상황을 확인할 수 있습니다. 그러나 항상 그래프를 싫어하고 보고서에 숫자를 제공하기를 원하는 사람들이 있습니다. 그들은 차트를 클릭하지 않을 것입니다.

Related posts

Spotify의 마법 성분 : 기계 학습

Spotify의 마법 성분 : 기계 학습

면책 조항 :이 기사는 Spotify와 관련이 없으며 Spotify 및 현재 관련이 없을 수있는 과거 구조에 대한 확인되지 않은 정보로 구성 될 수 있습니다. 음악은 표현의 한 형태, 예술의 형태, 전체적인 문화 활동입니다.

2021 년 2 월에 읽을 4 가지 딥 러닝 논문

2021 년 2 월에 읽을 4 가지 딥 러닝 논문

신경 과학에서 자동 분화, 신경망 이론 및 신경 과정의 과소 적합에 이르기까지 현재 추구되고있는 다양한 딥 러닝 연구 흐름에 대한 더 나은 개요를 얻고 싶으십니까? 합리적으로 통과하기에는 열려있는 arXiv 탭이 너무 많습니까? 전체 동영상을 볼 시간이 너무 적습니까? 논문의 핵심 아이디어와 개념에 대한 간략한 요약 만 있다면. 그런 다음 '머신-러닝-콜라주'시리즈를 소개하게되어 기쁩니다.

내부의 관심 네트워크 그래프

수학에서 NumPy까지 단계별 가이드

내부의 관심 네트워크 그래프

그래프 신경망 (GNN)은 그래프 데이터에서 학습 할 수있는 표준 도구 상자로 등장했습니다. GNN은 콘텐츠 추천 또는 신약 발견과 같은 다양한 분야에서 영향이 큰 문제를 개선 할 수 있습니다.

분할에 대한 고정 2 부 : Python으로 이미지 분할을 수행하는 방법

분할에 대한 고정 2 부 : Python으로 이미지 분할을 수행하는 방법

안녕하세요! 이미지 분할에 대한이 짧은 시리즈의 첫 번째 부분을 읽지 않았다면 여기에서 읽으십시오. 이전 이야기에서 임계 값 및 색상 분할에 대해 논의 했으므로 2 부에서는 색도 분할과 이미지 차이에 중점을 둘 것입니다.