이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

견적 자

TensorFlow.org에서보기 Google Colab에서 실행 GitHub에서 소스보기 노트북 다운로드

이 문서는 고수준 TensorFlow API 인 tf.estimator 소개합니다. 에스티 메이터는 다음 작업을 캡슐화합니다.

  • 훈련
  • 평가
  • 예측
  • 서빙을 위해 내보내기

당사에서 제공하는 사전 제작 된 에스티 메이터를 사용하거나 사용자 지정 에스티 메이터를 작성할 수 있습니다. 모든 tf.estimator.Estimator 사전 제작이든 사용자 지정 tf.estimator.Estimatortf.estimator.Estimator 클래스를 기반으로하는 클래스입니다.

간단한 예를 보려면 Estimator 자습서를 참조하십시오 . API 설계에 대한 개요는 백서를 참조하십시오.

설정

 pip install -q -U tensorflow_datasets
WARNING: You are using pip version 20.2.2; however, version 20.2.3 is available.
You should consider upgrading via the '/tmpfs/src/tf_docs_env/bin/python -m pip install --upgrade pip' command.

import tempfile
import os

import tensorflow as tf
import tensorflow_datasets as tfds

장점

tf.keras.Model 과 유사하게 estimator 는 모델 수준의 추상화입니다. tf.estimator 는 현재 tf.keras 용으로 개발중인 몇 가지 기능을 제공합니다. 이것들은:

  • 매개 변수 서버 기반 교육
  • 완전한 TFX 통합.

에스티 메이터 기능

에스티 메이터는 다음과 같은 이점을 제공합니다.

  • 모델을 변경하지 않고 로컬 호스트 또는 분산 다중 서버 환경에서 Estimator 기반 모델을 실행할 수 있습니다. 또한 모델을 다시 코딩하지 않고도 CPU, GPU 또는 TPU에서 Estimator 기반 모델을 실행할 수 있습니다.
  • 에스티 메이터는 다음과 같은 방법과시기를 제어하는 ​​안전한 분산 학습 루프를 제공합니다.
    • 데이터로드
    • 예외 처리
    • 체크 포인트 파일 생성 및 장애 복구
    • TensorBoard에 대한 요약 저장

에스티 메이터로 애플리케이션을 작성할 때 모델에서 데이터 입력 파이프 라인을 분리해야합니다. 이 분리는 서로 다른 데이터 세트로 실험을 단순화합니다.

미리 만들어진 에스티 메이터 사용

사전 제작 된 에스티 메이터를 사용하면 기본 TensorFlow API보다 훨씬 더 높은 개념 수준에서 작업 할 수 있습니다. 에스티 메이터가 모든 "배관"을 처리하므로 더 이상 계산 그래프 또는 세션 생성에 대해 걱정할 필요가 없습니다. 또한 사전 제작 된 에스티 메이터를 사용하면 최소한의 코드 변경 만 수행하여 다양한 모델 아키텍처를 실험 할 수 있습니다. 예를 들어 tf.estimator.DNNClassifier 는 밀집된 피드 포워드 신경망을 기반으로 분류 모델을 훈련하는 사전 제작 된 Estimator 클래스입니다.

사전 제작 된 Estimator에 의존하는 TensorFlow 프로그램은 일반적으로 다음 4 단계로 구성됩니다.

1. 입력 함수 작성

예를 들어 학습 세트를 가져 오는 함수 하나와 테스트 세트를 가져 오는 다른 함수를 만들 수 있습니다. 에스티 메이터는 입력이 한 쌍의 객체로 형식화 될 것으로 예상합니다.

  • 키가 기능 이름이고 값이 해당 기능 데이터를 포함하는 Tensor (또는 SparseTensors) 인 사전
  • 하나 이상의 레이블을 포함하는 Tensor

input_fn 은 해당 형식의 쌍을 생성하는 tf.data.Dataset 을 반환해야합니다.

예를 들어, 다음 코드는 빌드 tf.data.Dataset 타이타닉 데이터 세트의에서 train.csv 파일을 :

def train_input_fn():
  titanic_file = tf.keras.utils.get_file("train.csv", "https://storage.googleapis.com/tf-datasets/titanic/train.csv")
  titanic = tf.data.experimental.make_csv_dataset(
      titanic_file, batch_size=32,
      label_name="survived")
  titanic_batches = (
      titanic.cache().repeat().shuffle(500)
      .prefetch(tf.data.experimental.AUTOTUNE))
  return titanic_batches

input_fn A의 실행 tf.Graph 또한 직접 돌아갈 수 (features_dics, labels) 그래프 텐서를 포함하는 한 쌍의, 그러나 이것은 리턴 상수 같은 간단한 경우 에러 유발 밖이다.

2. 기능 열을 정의합니다.

tf.feature_column 은 기능 이름, 유형 및 모든 입력 전처리를 식별합니다.

예를 들어 다음 스 니펫은 3 개의 특성 열을 만듭니다.

  • 첫 번째는 age 기능을 부동 소수점 입력으로 직접 사용합니다.
  • 두 번째는 class 기능을 범주 입력으로 사용합니다.
  • 세 번째는 embark_town 을 범주 입력으로 사용하지만 hashing trick 을 사용하여 옵션을 열거하고 옵션 수를 설정할 필요가 없습니다.

자세한 정보는 기능 열 튜토리얼을 참조하십시오.

age = tf.feature_column.numeric_column('age')
cls = tf.feature_column.categorical_column_with_vocabulary_list('class', ['First', 'Second', 'Third']) 
embark = tf.feature_column.categorical_column_with_hash_bucket('embark_town', 32)

3. 관련 사전 제작 된 Estimator를 인스턴스화합니다.

예를 들어, 다음은 LinearClassifier 라는 사전 제작 된 Estimator의 샘플 인스턴스화입니다.

model_dir = tempfile.mkdtemp()
model = tf.estimator.LinearClassifier(
    model_dir=model_dir,
    feature_columns=[embark, cls, age],
    n_classes=2
)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpjm3x59ce', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

자세한 정보는 선형 분류기 튜토리얼을 참조하십시오.

4. 교육, 평가 또는 추론 방법을 호출합니다.

모든 에스티 메이터는 train , evaluatepredict 방법을 제공합니다.

model = model.train(input_fn=train_input_fn, steps=100)
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.
Downloading data from https://storage.googleapis.com/tf-datasets/titanic/train.csv
32768/30874 [===============================] - 0s 0us/step
INFO:tensorflow:Calling model_fn.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/canned/linear.py:1481: Layer.add_variable (from tensorflow.python.keras.engine.base_layer_v1) is deprecated and will be removed in a future version.
Instructions for updating:
Please use `layer.add_weight` method instead.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/keras/optimizer_v2/ftrl.py:112: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.
Instructions for updating:
Call initializer instance with the dtype argument instead of passing it to the constructor
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpjm3x59ce/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 0.6931472, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 100...
INFO:tensorflow:Saving checkpoints for 100 into /tmp/tmpjm3x59ce/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 100...
INFO:tensorflow:Loss for final step: 0.5892383.

result = model.evaluate(train_input_fn, steps=10)

for key, value in result.items():
  print(key, ":", value)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2020-09-23T01:21:41Z
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpjm3x59ce/model.ckpt-100
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Evaluation [10/10]
INFO:tensorflow:Inference Time : 0.74020s
INFO:tensorflow:Finished evaluation at 2020-09-23-01:21:42
INFO:tensorflow:Saving dict for global step 100: accuracy = 0.6875, accuracy_baseline = 0.609375, auc = 0.73963076, auc_precision_recall = 0.64400905, average_loss = 0.59503603, global_step = 100, label/mean = 0.390625, loss = 0.59503603, precision = 0.74509805, prediction/mean = 0.31810525, recall = 0.304
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 100: /tmp/tmpjm3x59ce/model.ckpt-100
accuracy : 0.6875
accuracy_baseline : 0.609375
auc : 0.73963076
auc_precision_recall : 0.64400905
average_loss : 0.59503603
label/mean : 0.390625
loss : 0.59503603
precision : 0.74509805
prediction/mean : 0.31810525
recall : 0.304
global_step : 100

for pred in model.predict(train_input_fn):
  for key, value in pred.items():
    print(key, ":", value)
  break
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpjm3x59ce/model.ckpt-100
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
logits : [-1.3046792]
logistic : [0.21337856]
probabilities : [0.78662145 0.21337858]
class_ids : [0]
classes : [b'0']
all_class_ids : [0 1]
all_classes : [b'0' b'1']

미리 만들어진 에스티 메이터의 이점

사전 제작 된 에스티 메이터는 모범 사례를 인코딩하여 다음과 같은 이점을 제공합니다.

  • 계산 그래프의 다른 부분이 실행되어야하는 위치를 결정하고 단일 머신 또는 클러스터에서 전략을 구현하는 모범 사례입니다.
  • 이벤트 (요약) 작성 및 보편적으로 유용한 요약에 대한 모범 사례.

미리 만들어진 에스티 메이터를 사용하지 않는 경우 이전 기능을 직접 구현해야합니다.

커스텀 에스티 메이터

사전 제작이든 맞춤이든 모든 Estimator의 핵심은 학습, 평가, 예측을위한 그래프를 작성하는 방법 인 모델 함수 입니다. 미리 만들어진 Estimator를 사용하는 경우 다른 사람이 이미 모델 기능을 구현 한 것입니다. 커스텀 에스티 메이터에 의존하는 경우 모델 함수를 직접 작성해야합니다.

따라서 권장되는 워크 플로는 다음과 같습니다.

  1. 적절한 사전 제작 된 Estimator가 있다고 가정하고이를 사용하여 첫 번째 모델을 구축하고 그 결과를 사용하여 기준선을 설정합니다.
  2. 이 사전 제작 된 Estimator를 사용하여 데이터의 무결성과 신뢰성을 포함한 전체 파이프 라인을 구축하고 테스트하십시오.
  3. 적합한 대체 사전 제작 된 Estimator를 사용할 수있는 경우 실험을 실행하여 어떤 사전 제작 된 Estimator가 최상의 결과를 생성하는지 확인합니다.
  4. 사용자 지정 Estimator를 빌드하여 모델을 더욱 개선 할 수 있습니다.

Keras 모델에서 에스티 메이터 생성

tf.keras.estimator.model_to_estimator 를 사용하여 기존 tf.keras.estimator.model_to_estimator 모델을 tf.keras.estimator.model_to_estimator 로 변환 할 수 있습니다. 이렇게하면 Keras 모델이 분산 학습과 같은 Estimator의 강점에 액세스 할 수 있습니다.

Keras MobileNet V2 모델을 인스턴스화하고 최적화 프로그램, 손실 및 메트릭을 사용하여 모델을 컴파일하여 다음과 같이 학습합니다.

tensorflow를 tf로 가져 오기 tensorflow_datasets를 tfds로 가져 오기

keras_mobilenet_v2 = tf.keras.applications.MobileNetV2(
    input_shape=(160, 160, 3), include_top=False)
keras_mobilenet_v2.trainable = False

estimator_model = tf.keras.Sequential([
    keras_mobilenet_v2,
    tf.keras.layers.GlobalAveragePooling2D(),
    tf.keras.layers.Dense(1)
])

# Compile the model
estimator_model.compile(
    optimizer='adam',
    loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
    metrics=['accuracy'])
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_160_no_top.h5
9412608/9406464 [==============================] - 1s 0us/step

컴파일 된 Keras 모델에서 Estimator 를 만듭니다. Keras 모델의 초기 모델 상태는 생성 된 Estimator 에서 유지됩니다.

est_mobilenet_v2 = tf.keras.estimator.model_to_estimator(keras_model=estimator_model)
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmp9s6ijizi
INFO:tensorflow:Using the Keras model provided.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/keras.py:220: set_learning_phase (from tensorflow.python.keras.backend) is deprecated and will be removed after 2020-10-11.
Instructions for updating:
Simply pass a True/False value to the `training` argument of the `__call__` method of your layer or model.
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmp9s6ijizi', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

파생 된 Estimator 를 다른 Estimator 와 마찬가지로 취급하십시오.

IMG_SIZE = 160  # All images will be resized to 160x160

def preprocess(image, label):
  image = tf.cast(image, tf.float32)
  image = (image/127.5) - 1
  image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
  return image, label
def train_input_fn(batch_size):
  data = tfds.load('cats_vs_dogs', as_supervised=True)
  train_data = data['train']
  train_data = train_data.map(preprocess).shuffle(500).batch(batch_size)
  return train_data

훈련하려면 Estimator의 훈련 함수를 호출하십시오.

est_mobilenet_v2.train(input_fn=lambda: train_input_fn(32), steps=50)
Downloading and preparing dataset cats_vs_dogs/4.0.0 (download: 786.68 MiB, generated: Unknown size, total: 786.68 MiB) to /home/kbuilder/tensorflow_datasets/cats_vs_dogs/4.0.0...

Warning:absl:1738 images were corrupted and were skipped

Shuffling and writing examples to /home/kbuilder/tensorflow_datasets/cats_vs_dogs/4.0.0.incompleteVPYUDE/cats_vs_dogs-train.tfrecord
Dataset cats_vs_dogs downloaded and prepared to /home/kbuilder/tensorflow_datasets/cats_vs_dogs/4.0.0. Subsequent calls will reuse this data.
INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmp9s6ijizi/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})

INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmp9s6ijizi/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})

INFO:tensorflow:Warm-starting from: /tmp/tmp9s6ijizi/keras/keras_model.ckpt

INFO:tensorflow:Warm-starting from: /tmp/tmp9s6ijizi/keras/keras_model.ckpt

INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.

INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.

INFO:tensorflow:Warm-started 158 variables.

INFO:tensorflow:Warm-started 158 variables.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp9s6ijizi/model.ckpt.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp9s6ijizi/model.ckpt.

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...

INFO:tensorflow:loss = 0.7802818, step = 0

INFO:tensorflow:loss = 0.7802818, step = 0

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...

INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmp9s6ijizi/model.ckpt.

INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmp9s6ijizi/model.ckpt.

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...

INFO:tensorflow:Loss for final step: 0.7024657.

INFO:tensorflow:Loss for final step: 0.7024657.

<tensorflow_estimator.python.estimator.estimator.EstimatorV2 at 0x7f6734021e10>

마찬가지로 평가하려면 Estimator의 평가 함수를 호출합니다.

est_mobilenet_v2.evaluate(input_fn=lambda: train_input_fn(32), steps=10)
INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_v1.py:2048: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.
Instructions for updating:
This property should not be used in TensorFlow 2.0, as updates are applied automatically.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_v1.py:2048: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.
Instructions for updating:
This property should not be used in TensorFlow 2.0, as updates are applied automatically.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Starting evaluation at 2020-09-23T01:22:32Z

INFO:tensorflow:Starting evaluation at 2020-09-23T01:22:32Z

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Restoring parameters from /tmp/tmp9s6ijizi/model.ckpt-50

INFO:tensorflow:Restoring parameters from /tmp/tmp9s6ijizi/model.ckpt-50

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Evaluation [1/10]

INFO:tensorflow:Evaluation [1/10]

INFO:tensorflow:Evaluation [2/10]

INFO:tensorflow:Evaluation [2/10]

INFO:tensorflow:Evaluation [3/10]

INFO:tensorflow:Evaluation [3/10]

INFO:tensorflow:Evaluation [4/10]

INFO:tensorflow:Evaluation [4/10]

INFO:tensorflow:Evaluation [5/10]

INFO:tensorflow:Evaluation [5/10]

INFO:tensorflow:Evaluation [6/10]

INFO:tensorflow:Evaluation [6/10]

INFO:tensorflow:Evaluation [7/10]

INFO:tensorflow:Evaluation [7/10]

INFO:tensorflow:Evaluation [8/10]

INFO:tensorflow:Evaluation [8/10]

INFO:tensorflow:Evaluation [9/10]

INFO:tensorflow:Evaluation [9/10]

INFO:tensorflow:Evaluation [10/10]

INFO:tensorflow:Evaluation [10/10]

INFO:tensorflow:Inference Time : 2.16132s

INFO:tensorflow:Inference Time : 2.16132s

INFO:tensorflow:Finished evaluation at 2020-09-23-01:22:34

INFO:tensorflow:Finished evaluation at 2020-09-23-01:22:34

INFO:tensorflow:Saving dict for global step 50: accuracy = 0.490625, global_step = 50, loss = 0.69025326

INFO:tensorflow:Saving dict for global step 50: accuracy = 0.490625, global_step = 50, loss = 0.69025326

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 50: /tmp/tmp9s6ijizi/model.ckpt-50

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 50: /tmp/tmp9s6ijizi/model.ckpt-50

{'accuracy': 0.490625, 'loss': 0.69025326, 'global_step': 50}

자세한 내용은 tf.keras.estimator.model_to_estimator 문서를 참조하세요.

에스티 메이터에서 저장된 모델

에스티 메이터는 tf.Estimator.export_saved_model을 통해 tf.Estimator.export_saved_model 모델을 내 tf.Estimator.export_saved_model .

input_column = tf.feature_column.numeric_column("x")

estimator = tf.estimator.LinearClassifier(feature_columns=[input_column])

def input_fn():
  return tf.data.Dataset.from_tensor_slices(
    ({"x": [1., 2., 3., 4.]}, [1, 1, 0, 0])).repeat(200).shuffle(64).batch(16)
estimator.train(input_fn)
INFO:tensorflow:Using default config.

INFO:tensorflow:Using default config.

Warning:tensorflow:Using temporary folder as model directory: /tmp/tmpvkv001gk

Warning:tensorflow:Using temporary folder as model directory: /tmp/tmpvkv001gk

INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpvkv001gk', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpvkv001gk', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpvkv001gk/model.ckpt.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpvkv001gk/model.ckpt.

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...

INFO:tensorflow:loss = 0.6931472, step = 0

INFO:tensorflow:loss = 0.6931472, step = 0

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...

INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmpvkv001gk/model.ckpt.

INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmpvkv001gk/model.ckpt.

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...

INFO:tensorflow:Loss for final step: 0.5307944.

INFO:tensorflow:Loss for final step: 0.5307944.

<tensorflow_estimator.python.estimator.canned.linear.LinearClassifierV2 at 0x7f667444d780>

저장하려면 Estimator 당신은 만들 필요가 serving_input_receiver . 이 함수는 tf.Graph 에서받은 원시 데이터를 구문 분석하는 tf.Graph 의 일부를 빌드합니다.

tf.estimator.export 모듈에는 이러한 receivers 구축하는 데 도움이되는 함수가 포함되어 있습니다.

다음 코드는 tf-serving 과 함께 자주 사용되는 직렬화 된 tf.Example 프로토콜 버퍼를 허용하는 feature_columns 기반으로 수신기를 빌드합니다.

tmpdir = tempfile.mkdtemp()

serving_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(
  tf.feature_column.make_parse_example_spec([input_column]))

estimator_base_path = os.path.join(tmpdir, 'from_estimator')
estimator_path = estimator.export_saved_model(estimator_base_path, serving_input_fn)
INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py:145: build_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.build_tensor_info or tf.compat.v1.saved_model.build_tensor_info.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py:145: build_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.build_tensor_info or tf.compat.v1.saved_model.build_tensor_info.

INFO:tensorflow:Signatures INCLUDED in export for Classify: ['serving_default', 'classification']

INFO:tensorflow:Signatures INCLUDED in export for Classify: ['serving_default', 'classification']

INFO:tensorflow:Signatures INCLUDED in export for Regress: ['regression']

INFO:tensorflow:Signatures INCLUDED in export for Regress: ['regression']

INFO:tensorflow:Signatures INCLUDED in export for Predict: ['predict']

INFO:tensorflow:Signatures INCLUDED in export for Predict: ['predict']

INFO:tensorflow:Signatures INCLUDED in export for Train: None

INFO:tensorflow:Signatures INCLUDED in export for Train: None

INFO:tensorflow:Signatures INCLUDED in export for Eval: None

INFO:tensorflow:Signatures INCLUDED in export for Eval: None

INFO:tensorflow:Restoring parameters from /tmp/tmpvkv001gk/model.ckpt-50

INFO:tensorflow:Restoring parameters from /tmp/tmpvkv001gk/model.ckpt-50

INFO:tensorflow:Assets added to graph.

INFO:tensorflow:Assets added to graph.

INFO:tensorflow:No assets to write.

INFO:tensorflow:No assets to write.

INFO:tensorflow:SavedModel written to: /tmp/tmpf62r0bly/from_estimator/temp-1600824155/saved_model.pb

INFO:tensorflow:SavedModel written to: /tmp/tmpf62r0bly/from_estimator/temp-1600824155/saved_model.pb

Python에서 해당 모델을로드하고 실행할 수도 있습니다.

imported = tf.saved_model.load(estimator_path)

def predict(x):
  example = tf.train.Example()
  example.features.feature["x"].float_list.value.extend([x])
  return imported.signatures["predict"](
    examples=tf.constant([example.SerializeToString()]))
print(predict(1.5))
print(predict(3.5))
{'all_class_ids': <tf.Tensor: shape=(1, 2), dtype=int32, numpy=array([[0, 1]], dtype=int32)>, 'probabilities': <tf.Tensor: shape=(1, 2), dtype=float32, numpy=array([[0.41081154, 0.58918846]], dtype=float32)>, 'all_classes': <tf.Tensor: shape=(1, 2), dtype=string, numpy=array([[b'0', b'1']], dtype=object)>, 'class_ids': <tf.Tensor: shape=(1, 1), dtype=int64, numpy=array([[1]])>, 'logits': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.36061144]], dtype=float32)>, 'logistic': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.58918846]], dtype=float32)>, 'classes': <tf.Tensor: shape=(1, 1), dtype=string, numpy=array([[b'1']], dtype=object)>}
{'all_class_ids': <tf.Tensor: shape=(1, 2), dtype=int32, numpy=array([[0, 1]], dtype=int32)>, 'probabilities': <tf.Tensor: shape=(1, 2), dtype=float32, numpy=array([[0.7386056 , 0.26139432]], dtype=float32)>, 'all_classes': <tf.Tensor: shape=(1, 2), dtype=string, numpy=array([[b'0', b'1']], dtype=object)>, 'class_ids': <tf.Tensor: shape=(1, 1), dtype=int64, numpy=array([[0]])>, 'logits': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[-1.038734]], dtype=float32)>, 'logistic': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.26139435]], dtype=float32)>, 'classes': <tf.Tensor: shape=(1, 1), dtype=string, numpy=array([[b'0']], dtype=object)>}

tf.estimator.export.build_raw_serving_input_receiver_fn 당신이 원시 텐서보다는 걸릴 입력 기능을 만들 수 있습니다 tf.train.Example 들.