TensorFlow의 상위수준 API

Estimator, Experiment, Dataset을 사용하여 모델을 학습하는 방법

이 블로그에서는 Estimator , Experiment, Dataset을 비롯한 새로운 상위 수준 구문을 사용하여 예제를 살펴 보겠습니다 . 실험과 데이터세트를 자체적으로 사용할 수 있다는 점도 유의해야합니다. TensorFlow의 기본 사항을 알고 있다고 가정합니다.

 

 

이 블로그에서 MNIST를 데이터세트로 사용할 것 입니다. TensorFlow에서 이미 액세스 할 수있는 사용하기 쉬운 데이터 세트입니다.

Estimator
Estimator 클래스는 모델과 모델을 학습하고 평가하는 방법을 포함합니다. 다음과 같이 Estimator를 생성 할 수 있습니다.

return tf.estimator.Estimator(
model_fn=model_fn,  # First-class function
params=params,  # HParams
config=run_config  # RunConfig
)

Estimator를 만들려면 모델 함수, 파라미터 모음 및 일부 구성을 전달해야합니다.

  • Parameter는 모델의 하이퍼 파라미터의 집합이어야 합니다.

  • configuration은 학습과 평가를 실행하고 여기서 결과를 저장하는 방법을 지정합니다. 이 configuration은 모델이 실행될 환경에 대해 Estimator가 알아야하는 모든 것을 전달하는 RunConfig 객체로 나타냅니다 .

  • Model function은 위의 주어진 모델을 구축 하는 Python 함수입니다.

Model function
Model function는 first-class function로서 Estimator에 전달되는 Python 함수입니다. 뒤에 TensorFlow가 다른 장소에서 first-class function을 사용한다는 것을 알 수 있습니다. 모델을 함수로 나타내는 이점은 함수를 인스턴스화하여 모델을 반복하여 다시 만들 수 있다는 것입니다. 예를 들어, 학습 도중 유효성 검사 테스트를 실행하는 등 다른 입력을 통해 학습 중에 모델을 다시 만들 수 있습니다.

Model function은 입력 특징을 파라미터로, 해당 레이블을 텐서로 취합니다 . 또한 모델이 학습, 추측 또는 평가를 하는 경우 신호를 보내는 모드를 사용합니다. Model function의 마지막 파라미터는 Estimator에 전달된 파라미터와 동일한 하이퍼파라미터의 컬렉션이어야합니다. 이 Model function은 완전한 모델을 정의하는 EstimatorSpec 객체를 반환해야합니다.

EstimatorSpec은 예측, 손실, 학습 및 평가 작업을 받아 학습, 평가 및 추론에 사용되는 전체 모델 그래프를 정의합니다. EstimatorSpec은 정기적인 TensorFlow 작업만 수행하므로 TF-Slim과 같은 프레임워크를 사용하여 모델을 정의 할 수 있습니다.

Experiment
Experiment 클래스는 모델을 학습하는 방법을 정의하고 Estimator와 잘 통합되어 있습니다.

experiment = tf.contrib.learn.Experiment(
estimator=estimator,  # Estimator
train_input_fn=train_input_fn,  # First-class function
eval_input_fn=eval_input_fn,  # First-class function
train_steps=params.train_steps,  # Minibatch steps
min_eval_frequency=params.min_eval_frequency,  # Eval frequency
train_monitors=[train_input_hook],  # Hooks for training
eval_hooks=[eval_input_hook],  # Hooks for evaluation
eval_steps=None  # Use evaluation feeder until its empty
)

Experiment는 입력을 받아들입니다.

  • estimator (예를 들어 우리가 위에서 정의된).

  • first-class function으로 데이터를 학습하고 평가하십시오. 앞에서 설명한 Model function과 동일한 개념이 여기에 사용됩니다. 연산 대신에 함수를 전달함으로써, 필요하다면 입력 그래프를 재작성할 수 있습니다. 나중에 이것에 대해 더 이야기 할 것입니다.

  • 후크를 학습하고 평가하십시오. 이 후크는 특정 항목을 저장하거나 모니터하거나 그래프 또는 세션에서 특정 작업을 설정하는 데 사용할 수 있습니다. 예를 들어, 데이터 로더를 초기화하는 작업을 전달합니다.

  • 학습할 시간과 평가 시기를 나타내는 다양한 파라미터.

Experiment를 정의하고 나면 다음과 같이 learn_runner.run 을 사용하여 모델을 학습하고 평가할 수 있습니다.

learn_runner.run(
experiment_fn=experiment_fn,  # First-class function
run_config=run_config,  # RunConfig
schedule=”train_and_evaluate”,  # What to run
hparams=params  # HParams
)

Model function과 데이터 함수처럼 학습 러너는 실험을 매개 변수로 생성하는 함수를 사용합니다.

Dataset
Dataset 클래스와 해당 Iterator를 사용하여 학습과 평가 데이터를 나타내고, 학습중 데이터를 반복하는 data feeder를 만듭니다. 이 예에서는 Tensorflow에서 사용할 수 있는 MNIST 데이터를 사용하고 Dataset 래퍼를 만듭니다.

# Define the training inputs
def get_train_inputs(batch_size, mnist_data):
“””Return the input function to get the training data.

    Args:
batch_size (int): Batch size of training iterator that is returned
by the input function.
mnist_data (Object): Object holding the loaded mnist data.

    Returns:
(Input function, IteratorInitializerHook):
– Function that returns (features, labels) when called.
– Hook to initialise input iterator.
“””
iterator_initializer_hook = IteratorInitializerHook()

    def train_inputs():
“””Returns training set as Operations.

        Returns:
(features, labels) Operations that iterate over the dataset
on every evaluation
“””
with tf.name_scope(‘Training_data’):
# Get Mnist data
images = mnist_data.train.images.reshape([-1, 28, 28, 1])
labels = mnist_data.train.labels
# Define placeholders
images_placeholder = tf.placeholder(
images.dtype, images.shape)
labels_placeholder = tf.placeholder(
labels.dtype, labels.shape)
# Build dataset iterator
dataset = tf.contrib.data.Dataset.from_tensor_slices(
(images_placeholder, labels_placeholder))
dataset = dataset.repeat(None)  # Infinite iterations
dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.batch(batch_size)
iterator = dataset.make_initializable_iterator()
next_example, next_label = iterator.get_next()
# Set runhook to initialize iterator
iterator_initializer_hook.iterator_initializer_func = \
lambda sess: sess.run(
iterator.initializer,
feed_dict={images_placeholder: images,
labels_placeholder: labels})
# Return batched (features, labels)
return next_example, next_label

    # Return function and hook
return train_inputs,

코드 실행

이제 모든 것을 정의 했으므로 다음 명령을 사용하여 코드를 실행할 수 있습니다.

python mnist_estimator.py –model_dir ./mnist_training –data_dir

./mnist_data

파라미터를 전달하지 않으면 파일의 맨 위에 있는 기본 플래그를 사용하여 데이터 및 모델을 저장할 위치를 찾습니다.

이 학습을 통해 터미널 출력에서 ​​시간 경과에 따른 글로벌 단계, 손실 및 정확도와 같은 정보가 출력됩니다. 이 외에도 Experiment과 Estimator 프레임 워크는 TensorBoard에서 시각화할 특정 통계를 기록 합니다.

tensorboard –logdir = ‘. / mnist_training’

그런 다음 학습 손실, 평가 정확도, 프로세스 당 시간 및 Model graph와 같은 모든 학습 통계를 볼 수 있습니다.

 

 

Estimator, Experiment, Dataset 프레임워크에 대한 참고 사항
1. Estimator 프레임워크의 상위 레벨 설계를 설명하는 “TensorFlow Estimators: Managing Simplicity vs. Flexibility in High-Level Machine Learning Frameworks” 라는 논문이 있습니다.

2. TensorFlow에는 Dataset API 사용에 대한 자세한 설명서가 있습니다.

3. Estimator 클래스에는 두가지 버전이 있습니다. 이 예제에서는 tf.estimator.Estimator을 사용하고 있지만, tf.contrib.learn.Estimator라는 이전의 불안정한 버전이 있습니다.

3. RunConfig 클래스에는 두가지 버전이 있습니다. tf.contrib.learn.RunConfig과 tf.estimator.RunConfig

4. 이 예제에서는 사용하지 않았지만 Estimator 프레임워크는 classifier, regressor와 같은 일반적인 모델에 대해 미리 정의 된 Estimator가 있습니다. 사전 정의된 Estimator는 사용하기 쉽고 상세한 튜토리얼과 함께 제공됩니다 .

원문

https://medium.com/onfido-tech/higher-level-apis-in-tensorflow-67bfb602e6c0

Tags:

TwnsorFLow

API

Estimator

Experiment

Dataset

Python

MNIST

Model function