티스토리 뷰

반응형

1. 모델 저장하기에 앞서 파일에 있는 데이터를 가져오는 것부터 알아보자.

import tensorflow as tf
import numpy as np

data = np.loadtxt('file path', delimiter=',',unpack=True,dtype='float32')
x_data = np.transpose(data[0:2])
y_data = np.transpose(data[2:])

[참고]
numpy 라이브러리의 loadtxt함수를 이용하여 간단히 데이터를 읽어 올 수 있다.
loadtxt의 unpack 매개 변수와 transpose함수는 읽어드린 데이터의 행과 열을 뒤바꿔주는 옵션과 함수이다. 특히 딥러닝에서는 다양한 학습 알고리즘을 적용하거나 행렬 연산을 효율적으로 하기 위해 데이터의 행과 열을 상황에 맞게 변환하는 일이 잦다. 따라서 다른 수학 기법은 몰라도 행렬 관련 개념은 꼭 익혀 두는 것이 좋다.

2. 신경망 모델 구성에 앞서 모델을 저장할 때 쓸 변수를 하나 만들어보자.
이 변수는 학습에서 직접 사용되지 않고 학습 횟수를 카운트 하며 추후 데이터 저장시 파일명에 영향을 미치게 된다.
학습에 관여하지 않는 변수를 선언하기 위해 아래와 같이 trainable = False라는 옵션을 준다.

global_step = tf. Variable(0, trainable = False, name='global_step')

이어서 우리가 흔히 알고 있는 여러 계층을 가진 학습 모델을 작성한다.
[참고]
신경망의 계층 수와 은닉층의 뉴런 수를 늘리면 복잡도가 높은 문제를 해결할 수 있다. 하지만 이렇게 한다고 무조건 좋은 결과를 얻을 수 있는 것은 아니다. 오히려 과적합에 빠질 수 있기 때문이다. 즉, 신경망 모델 구성에서 겨층과 뉴런수를 최적화 하는 것이 효과적인 모델을 설계하는 핵심중 하나이다.

여러 계층의 모델을 작성하고 마지막 부분에 위에 작성한 global_step 변수를 optimizer.minimize함수에 매개 변수로 넘겨주자.

train_op = optimizer.minimize(cost, global_step = global_step)

이와 같이 작성하면 최적화 함수가 학습용 변수들을 최적화할 때마다 global_step 변수의 값이 1씩 증가한다.

3. 모델 구성이 끝났으면 드디어 모델을 불러들이고 저장하는 코드를 살펴 보자.

sess = tf.Session()
saver = tf.train.Saver(tf.global_variables())

tf.global_variables는 앞서 정의한 변수들을 가져오는 함수이다. 이 함수를 써서 앞서 정의한 변수들을 모두 가져와 이 변수들을 파일에 저장하거나 이전에 학습한 결과를 불러와 담는 변수들로 사용한다.

4. 이제 기존에 저장해둔 학습 모델이 있는지 여부와 학습된 값들을 불러오는 부분을 살펴보자.

ckpt = tf.train.get_checkpoint_state('./model')
if ckpt and tf.train.checkpoint_exists(ckpt.model_checkpoint_path):
saver.restore(sess, ckpt.model_checkpoint_path)
else:
sess.run(tf.global_variables_initializer())

위 코드를 보면 ./model 경로에 기존에 학습해둔 모델이 있는지 확인하는 코드 이다.
파일에 존재하면 saver.restore 함수를 통해 학습된 값들을 불러오고 아니면 최초 학습이므로 모든 변수를 새로 초기화 한다.

이와 같이 초기화가 끝나고 최적화를 수행한다.

5. 최적화가 모두 끝나면 학습된 변수들을 지정한 체크포인트 파일에 저장한다.

saver.save(sess, './model/dnn.ckpt', global_step = global_step)
두 번째 매개변수는 체크포인트 파일의 위치와 이름이다.
단, 상위 디렉토리 ./model은 기존에 생성되어 있어야 한다. [자동 생성되지 않는다.]
global_step의 값은 저장할 파일의 이름에 추가로 붙는다. 텐서 변수 도는 숫자값을 넣어 줄 수 있다.
이를 이용해서 여러 상태의 체크포인트를 만들 수 있고, 가장 효과적인 체크포인트를 선별하여 사용할 수 있다.

이와 같이 학습 모델을 저장하고 다시 불러오는 것을 응용하여 모델 구성, 학습, 예측 부분을 각각 분리하여 학습을 따로 한뒤 예측만 단독으로 실행하는 프로그램도 작성할 수 있다.


[출처 : 3분 딥러닝 텐서플로우 맛]

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함