목차
모델을 학습시키기 전에 설정할 것
1. Loss Function
- crossentropy 사용
- 그 중 sparse_categorical_crossentropy 사용
2. Metrics : 모델 평가 방법
- accuracy 사용
- accuracy가 가장 흔히 사용됨
#accuracy 설정하는 방법 1
metrics = ['accuracy']
#accuracy 설정하는 방법 2
tf.keras.metrics.Accuracy()
3. compile : Optimizer 적용
- 여러 optimizer 중 Adam으로 적용해준다.
모델 학습
1. 학습에 사용할 데이터셋 준비
- 사용한 데이터셋 : MNIST
- 데이터 셋의 차원을 확인하고 gray scale이라면 차원을 하나 늘려주는 과정이 필요하다
- rgb라면 따로 차원 추가 작업이 필요하지 않다
import numpy as np
np.expand_dims(train_x,-1).shape #차원 추가하는 방법
2. Rescaling
- 리스케일링 작업을 하면 학습이 너무 튀지 않고 골고루 잘됨
- 데이터의 최소값과 최대값을 확인하면 최소값이 0, 최대값이 255다.
- 값이 0~1사이가 되게하기 위해 test 데이터와 train 데이터 모두 255로 나눠준다.
3. 학습용 하이퍼 파라미터 설정
- num_epochs : 전체 데이터를 한번 쭉 보는 게 epoch.
- batch_size : 한 에폭을 가기 위해 batch_size만큼 데이터가 들어감
4. model.fit으로 학습진행
- shuffle : train할때는 shuffle을 해줘야 한다. shuffle을 하지 않으면 overfitting 발생 확률이 높아진다.
model.fit(train_x,train_y,batch_size=batch_size, shuffle=True, epochs=num_epochs)
모델을 훈련하는 다른 방법
www.tensorflow.org/tutorials/quickstart/advanced?hl=ko
tensorflow 공식문서에 나오는 방식으로 모델을 만들고 훈련하고 테스트해보자.
1. 데이터셋 만들기
- tf.data를 활용해서 데이터 셋을 만들고 섞고 배치를 만든다.
train_ds = tf.data.Dataset.from_tensor_slices((x_train, y_train)) #튜플로 담음
train_ds = train_ds.shuffle(1000) #버퍼 사이즈, 1000정도가 적당한 값
train_ds = train_ds.batch(32) #iteration할때마다 batch size만큼의 데이터가 나옴
test_ds = tf.data.Dataset.from_tensor_slices((x_test, y_test)) #테스트용 데이터
test_ds = test_ds.batch(32) #test할때는 shuffle 굳이 할 필요 없음
2. Training
- 훈련하기 전에 loss function과 optimizer를 설정해준다.
- 훈련을 위와 다르게 compile을 사용하지 않고 직접 loss를 계산해서 구현한다
- tf.GradientTape을 사용해 모델을 훈련한다.
- 훈련하기 전에 설정한 loss function을 사용해 loss를 계산한다.
@tf.function
def train_step(images, labels):
with tf.GradientTape() as tape:
predictions = model(images) #이미지를 받아서 모델에 넣으면 예측 진행
loss = loss_object(labels, predictions) #loss 계산
#loss를 통해 기울기를 얻어서 optimizer에 적용 시킬 것임
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables)) #받은 기울기를 Adam에 적용
train_loss(loss) #loss의 평균값을 내는 함수
train_accuracy(labels, predictions) #accuracy 계산하는 함수
3. 모델 테스트
@tf.function
def test_step(images, labels):
predictions=model(images)
t_loss=loss_object(labels, predictions)
test_loss(t_loss)
test_accuracy(labels,predictions)
모델 평가하기
1. 학습을 진행한 모델에 evaluate 함수를 사용해서 loss와 accuracy를 확인할 수 있다.
model.evaluate(test_x, test_y, batch_size=batch_size)
2. 모델에 test 데이터를 넣고 predict 함수를 사용해서 결과를 확인한다.
- 모델이 evaluation 모드로 전환되고 이 문제에 대한 결과만 출력됨
pred = model.predict(test_image.reshape(1,28,28,1))
3. 결과 값 중 pred 값이 가장 높은 것이 정답이다.
- 마지막에 가장 높은 값을 얻은 노드가 정답
- 그래서 pred값 중 가장 높은 값을 찾으면 그게 정답
- 아래 코드를 입력하면 가장 높은 값의 인덱스가 나오고 해당 인덱스의 값이 모델이 정답이라고 생각하는 값이다.
np.argmax(pred)
'Study > 머신러닝' 카테고리의 다른 글
[tensorflow] ImageDataGenerator로 생성한 이미지 데이터로 학습 (0) | 2021.01.25 |
---|---|
[PyTorch] PyTorch로 CNN 레이어 쌓기 (0) | 2021.01.17 |
[CNN] 레이어 쌓아서 모델 생성하기 (0) | 2021.01.11 |
MNIST 데이터셋을 활용해 시각화하기 (0) | 2021.01.11 |
딥러닝 학습 과정과 용어 (0) | 2021.01.11 |