1. Estimator API

Estimaotor API는 앞서 학습한 텐서플로의 API에서 상위 레벨의 한 부분이다.

Estimator API를 사용하면 매번 코드를 일일이 입력하지 않고도,
위의 도표에 있는 다양한 이점을 활용할 수 있다.

텐서플로는 직접 바로 실행해볼 수 있는 pre-made estimator들을 활용할 수 있다.

2. Pre-made Estimators

예시를 들어 부동산의 가격을 예측을 하려고 하자.
이 때 우리는 먼저 피처를 선택해야 한다.
이번 예시에서는 집의 면적과 종류를 피처로 사용.

먼저 피처를 정하기 위해 feature_column API를 사용할 수 있다.
이번 예시에서는 numeric column과 categorical column이 하나씩 사용되었다.

그 후에는 모델을 선택하는데 이번 예시에서는 linear regressor가 선택되었다.

선형회귀모델은 데이터의 벡터를 인풋으로 받아들이고, 이 인풋들에 대한 가중치를 조절해나가면서
아웃풋으로 예측 숫자(부동산 가격)을 예측한다.

이번 예시에서는 numeric과 categorical 만을 사용했지만 embedding, crossed 등 더 다양한 형태의 컬럼이 API로 존재한다.

그 후에는 모델에 input 데이터를 넣어, 모델을 학습시킨다.
이번 예제에서는 데이터셋에 대해 100번 반복해서 학습을 한다.

이 후에는 인풋 데이터와는 다른 데이터를 집어넣어 결과를 예측한다.

다른 pre-made estimator를 사용하려면 위와 같이
클래스을 변경하고 그에 따른 적절한 파라미터만 적용해주면 된다.

아래는 위의 예시를 반복해서 실행해본 내용

3. Checkpoint

체크포인트는 위와 같이 학습의 지속, 실패로부터의 재개, 학습된 모델로부터의 예측 등을 위해 유용하게 사용된다.

위와 같이 모델을 정의할 때 어디에 체크포인트를 저장할지 경로를 지정해주면 된다.

그 후에는 위와 같이 다시 불러와서 저장된 학습된 모델을 가지고 예측을 수행할 수 있다.

그리고 위와 같이 학습된 데이터를 불러와서 학습을 마저 재개할 수도 있다.
만약 다시 처음부터 다시 학습을 재개하고 싶다면 이 폴더를 삭제하면 된다.
최근의 체크포인트로부터 시작하는 것이 디폴트이기 때문에 학습을 처음부터 다시 수행시키고 싶다면
체크포인트를 반드시 삭제해야한다.

4. Training on in-memory datasets

데이터셋이 numpy array이거나 pandas 이면 Estimator API는
데이터를 입력하는데 편리한 함수를 가지고 있다.
estimator.inputs.numpy_input_fn(),estimator.inputs.numpy_input_fn()
위의 예시처럼 피처가 될 x와 레이블이 될 y를 지정해주면 된다.

이 함수들은 뉴럴 네트워크모델 학습에 키가 되는 몇몇 기능들을 가지고 있다.
먼저 배치 사이즈를 조절할 수 있다.
→) 전체 데이터셋을 한번에 학습하는 것보다 데이터의 미니 배치를 단계별로 학습하는 것이 통상 좋다.
그리고 데이터 셋을 몇번 반복할 것인지 에포크 숫자를 조절함으로써 세팅할 수 있다.
데이터를 무작위로 섞기도 가능하며, 복제된 데이터셋의 크기 또한 조절이 가능하다.

기본적으로 학습은 데이터가 소진되거나 정의한 n 에포크에 도달할 때까지 진행된다.
그리고 학습 함수를 호출할 때, step수를 지정해줌으로써 더 진행할 수도 있다.
위의 예시에서는 마지막 체크포인트에서부터 1000번의 학습스텝을 더 진행한다.
그리고 max_steps에서 지정한 수에 도달하면 학습을 멈추게 할 수도 있다.
(하지만 체크포인트가 이미 그 지점까지 와있다면 별 영향이 없다.)

'구글 머신러닝 스터디잼(중급) > Introduction to TensorFlow' 카테고리의 다른 글

Debugging TensorFlow Programs  (0) 2019.10.29
TensorFlow 실습 1  (0) 2019.10.28
Tensor and Variable  (0) 2019.10.25
Graph and Session  (0) 2019.10.25
TensorFlow API Hierarchy  (0) 2019.10.25

+ Recent posts