1 개요
학습 모델을 설계하고 제작한다. 층을 쌓아서 제작하는 형태.
1.1 예시와 사용
이미지 분류에 대한 모델은 다음과 같이 만들어진다.
의도 | 설명 | 방법 |
---|---|---|
모델 제작 | from tensorflow.keras import layers
# 입력 데이터 처리.
inputs = keras.Input(shape=(None, None, 3)) # 3개의 채널, 크기제한 없음.
x = CenterCrop(height=150, width=150)(inputs) # 이미지 크롭.
x = Rescaling(scale=1.0 / 255)(x) # 0~1 사이의 값으로 스케일링.
# 층 만들기.
x = layers.Conv2D(filters=32, kernel_size=(3, 3), activation="relu")(x) # 합성곱 레이어.
x = layers.MaxPooling2D(pool_size=(3, 3))(x) # 풀링층
x = layers.Conv2D(filters=32, kernel_size=(3, 3), activation="relu")(x)
x = layers.MaxPooling2D(pool_size=(3, 3))(x)
x = layers.Conv2D(filters=32, kernel_size=(3, 3), activation="relu")(x)
x = layers.GlobalAveragePooling2D()(x) # 평균풀링.
num_classes = 10
outputs = layers.Dense(num_classes, activation="softmax")(x) # 분류 갯수(num_classes)에 따라 분류한다.
# 모델 제작
model = keras.Model(inputs=inputs, outputs=outputs)
| |
모델 정보 보기 | 모델에 대한 요악정보를 볼 수 있다. | model.summary()
|
모델 교육 | 모델을 교육한다. | # 어떤 방식으로 교육할지 지정.
model.compile(optimizer=keras.optimizers.RMSprop(learning_rate=1e-3),
loss=keras.losses.CategoricalCrossentropy())
batch_size = 32 # 검증데이터의 배치사이즈에서도 공유해야 하기 때문에 변수로 지정.
callbacks = [ # 각 에포크마다 교육데이터를 저장한다.
keras.callbacks.ModelCheckpoint(
filepath='path/to/my/model_{epoch}',
save_freq='epoch')
]
# 사용할 데이터 지정.
dataset = tf.data.Dataset.from_tensor_slices((numpy_array_of_samples, numpy_array_of_labels)).batch(batch_size)
# 검증 데이터 설정.
val_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(batch_size)
# 모델 교육 및 검증. dataset 안에 배치사이즈를 지정해 담았다.
history = model.fit(dataset, epochs=1, callbacks=callbacks,
validation_data=val_dataset)
print(history.history) # 로스, 정확도 등의 데이터를 보여준다.
|
2 모델 제작
2.1 Sequential 사용
keras.models.Sequential() 순차적으로 쌓일 모델 객체를 생성한다.
from keras.models import Sequential
model = Sequential()
# 필요한 층을 더한다.
model.add(LSTM(50, return_sequences=True, input_shape=(50,1))) # 50개 유닛을 갖는 LSTM층 생성.
model.add(Dense(1, activation='linear')) # 일반 뉴런층 1개. 결과가 1개가 나온다.
model.compile(loss='mse', optimizer='rmsprop') # 손실함수 따위를 결정한다.
3 모델 교육
model.fit(x, y,
validation_data = (x_test, y_test),
batch_size = 10, # 한 번에 몇 개의 데이터를 묶어서 학습시킬 것인가.
epochs = 20, # 몇 번 학습시킬 것인가?
)
4 모델 검증
validation_data를 넣어 loss 검사를 할 수도 있지만...
validation_split를 0~1 사이로 넣으면, 데이터를 처리하기 전에 해당 비율만큼 마지막에서 떼내어 epoch가 끝나면 loss를 계산하는 데 쓰인다.