1 of 38

이제 하이퍼파라미터 튜닝은 케라스 튜너에게 맡기세요

이제 발표도 인공지능에게 맡기세요

2 of 38

하 하 하

3 of 38

정승환 대표님 및 라이온로켓분들 감사합니다.

4 of 38

숨막히는 대본

5 of 38

허 허 허

6 of 38

...

7 of 38

8 of 38

9 of 38

model = Sequential()

model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))

model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))

model.add(Flatten())

model.add(Dense(20, activation='relu'))

model.add(Dropout(0.2))

model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer=Adam(0.001))

model.summary()

10 of 38

model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))

11 of 38

model.add(Dense(20, activation='relu'))

model.add(Dropout(0.2))

12 of 38

model.add(Dense(10, activation='softmax'))

13 of 38

model.compile(loss='categorical_crossentropy', optimizer=Adam(0.001))

14 of 38

  • 첫번째 Conv2D의 필터 수 : L1_NUM_FILTERS
  • 두번째 Conv2D의 필터 수 : L2_NUM_FILTERS
  • Dense - Dropout 은닉층의 반복횟수 : NUM_LAYERS
  • Dense 레이어의 출력뉴런 수 : NUM_DIMS
  • Dropout 레이어의 드랍율 : DROPOUT_RATE
  • 최적화기의 학습률 : LR

15 of 38

LR = Choice('learning_rate', [0.001, 0.0005, 0.0001], group='optimizer')

DROPOUT_RATE = Linear('dropout_rate', 0.0, 0.5, 5, group='dense')

NUM_DIMS = Range('num_dims', 8, 32, 8, group='dense')

NUM_LAYERS = Range('num_layers', 1, 3, group='dense')

L2_NUM_FILTERS = Range('l2_num_filters', 8, 64, 8, group='cnn')

L1_NUM_FILTERS = Range('l1_num_filters', 8, 64, 8, group='cnn')

16 of 38

def model_fn():

LR = Choice('learning_rate', [0.001, 0.0005, 0.0001], group='optimizer')

DROPOUT_RATE = Linear('dropout_rate', 0.0, 0.5, 5, group='dense')

NUM_DIMS = Range('num_dims', 8, 32, 8, group='dense')

NUM_LAYERS = Range('num_layers', 1, 3, group='dense')

L2_NUM_FILTERS = Range('l2_num_filters', 8, 64, 8, group='cnn')

L1_NUM_FILTERS = Range('l1_num_filters', 8, 64, 8, group='cnn')

17 of 38

model = Sequential()

model.add(Conv2D(L1_NUM_FILTERS, kernel_size=(3, 3), activation='relu'))

model.add(Conv2D(L2_NUM_FILTERS, kernel_size=(3, 3), activation='relu'))

model.add(Flatten())

for _ in range(NUM_LAYERS):

model.add(Dense(NUM_DIMS, activation='relu'))

model.add(Dropout(DROPOUT_RATE))

model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer=Adam(LR))

return model

18 of 38

tuner = Tuner(model_fn, 'val_accuracy' epoch_budget=500, max_epochs=5)

tuner.search(train_data,validation_data=validation_data)

19 of 38

20 of 38

21 of 38

22 of 38

23 of 38

24 of 38

25 of 38

26 of 38

27 of 38

28 of 38

29 of 38

30 of 38

31 of 38

32 of 38

33 of 38

34 of 38

35 of 38

36 of 38

37 of 38

38 of 38

짝 짝 짝