"Keras:모델 제작"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
잔글 (→‎개요)
74번째 줄: 74번째 줄:
 
keras.models.Sequential() 순차적으로 쌓일 모델 객체를 생성한다.<syntaxhighlight lang="python">
 
keras.models.Sequential() 순차적으로 쌓일 모델 객체를 생성한다.<syntaxhighlight lang="python">
 
from keras.models import Sequential
 
from keras.models import Sequential
 +
from keras import layers  # 층을 불러온다.
  
 
model = Sequential()
 
model = Sequential()
 
# 필요한 층을 더한다.
 
# 필요한 층을 더한다.
model.add(LSTM(50, return_sequences=True, input_shape=(50,1)))  # 50개 유닛을 갖는 LSTM층 생성.
+
model.add(layers.LSTM(50, return_sequences=True, input_shape=(50,1)))  # 50개 유닛을 갖는 LSTM층 생성.
model.add(Dense(1, activation='linear'))  # 일반 뉴런층 1개. 결과가 1개가 나온다.
+
# 50개 OUT.
 +
model.add(layers.Dense(1, activation='linear'))  # 일반 뉴런층 1개. 결과가 1개가 나온다.
 +
# 1개 OUT.
 
model.compile(loss='mse', optimizer='rmsprop')  # 손실함수 따위를 결정한다.
 
model.compile(loss='mse', optimizer='rmsprop')  # 손실함수 따위를 결정한다.
  

2021년 12월 2일 (목) 12:56 판

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
from keras import layers  # 층을 불러온다.

model = Sequential()
# 필요한 층을 더한다.
model.add(layers.LSTM(50, return_sequences=True, input_shape=(50,1)))  # 50개 유닛을 갖는 LSTM층 생성.
# 50개 OUT.
model.add(layers.Dense(1, activation='linear'))  # 일반 뉴런층 1개. 결과가 1개가 나온다.
# 1개 OUT.
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를 계산하는 데 쓰인다.