모델 만들기

Sequential 모델

model = keras.Sequential([
    layers.Dense(64, activation='relu', name='first_layer'),
    layers.Dense(32, activation='relu')
], name='sequential_model')

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

model.weightsmodel.summary() 등은 build나 complie 이후에 볼 수 있다.

함수형 API

inputs = keras.Input(shape=(3,), name='input')
hidden = keras.Sequential([layers.Dense(32, activation='relu'), layers.Dense(64, activation='relu')])(inputs)

features = layers.Dense(64, activation='relu')(hidden)
outputs = layers.Dense(10, activation='softmax')(features)
model = keras.Model(inputs=inputs, outputs=outputs)

위와 같이 쓸 수 있다.

장점

  1. 다중입력, 다중 출력도 문제없다
vocab_size = 10000
num_tags = 100
num_departments = 4

#3개의 입력
title = keras.Input(shape=(vocab_size,), name='title')
text_body = keras.Input(shape=(vocab_size,), name='text_body')
tags = keras.Input(shape=(num_tags,), name='tags')

features = layers.Concatenate()([title, text_body, tags])
features = layers.Dense(64, activation='relu')(features)

#2개의 출력
priority = layers.Dense(1, activation='sigmoid', name='priority')(features)
department = layers.Dense(num_departments, activation='softmax', name='department')(features)

model = keras.Model(inputs=[title, text_body, tags], outputs=[priority, department])

컴파일과 학습은 아래와 같이 할 수 있다.

model.compile(optimizer='rmsprop', loss={'priority':'mean_squared_error', 'department':'categorical_crossentropy'}, metrics={'priority': ['mean_absolute_error'], 'department': ['accuracy']})
model.fit({'title': title_data, 'text_body': text_body_data, 'tags': tags_data}, {'priority': priority_data, 'department': department_data})

priority_pred, department_pred = model.predict({'title': title_data, 'text_body': text_body_data, 'tags': tags_data})
  1. 모델의 토폴로지를 시각화하기 좋다
keras.utils.plot_model(model, 'ticket_classifier.png', show_shapes=True, show_layer_activations=True)

Untitled

  1. 중간 특성을 재사용할 수 있다.