도움말 Kaggle에 TensorFlow과 그레이트 배리어 리프 (Great Barrier Reef)를 보호하기 도전에 참여

TensorFlow 변환 시작하기

이 가이드의 기본 개념을 소개 tf.Transform 과 사용 방법을. 다음 작업을 수행합니다.

  • 전처리 기능, 변환은 데이터에 대한 원시 데이터를 기계 학습 모델을 훈련하기 위해 사용되는 파이프 라인의 논리적 설명을 정의한다.
  • 표시 아파치 빔 빔 파이프 라인 전처리 함수를 변환하여 데이터를 변환하기 위해 사용되는 구현.
  • 추가 사용 예를 보여줍니다.

전처리 함수 정의

전처리 기능의 가장 중요한 개념이다 tf.Transform . 전처리 기능은 데이터 세트의 변환에 대한 논리적 설명입니다. 전처리 기능을 받아들이고 텐서 수단 텐서의 사전 반환 Tensor 또는 SparseTensor . 전처리 기능을 정의하는 데 사용되는 두 가지 종류의 기능이 있습니다.

  1. 텐서를 수락하고 반환하는 모든 함수. 이는 원시 데이터를 변환된 데이터로 변환하는 TensorFlow 작업을 그래프에 추가합니다.
  2. 에서 제공하는 분석기의 모든 tf.Transform . 분석기는 또한 받아 텐서를 반환하지만, TensorFlow 기능과는 달리, 그들은 그래프에 작업을 추가하지 마십시오. 대신, 원인 분석기 tf.Transform TensorFlow의 전체 패스 작동 외부를 계산합니다. 그들은 전체 데이터 세트에 대한 입력 텐서 값을 사용하여 출력으로 반환되는 상수 텐서를 생성합니다. 예를 들어, tft.min 데이터 세트 위에 텐서의 최소를 계산한다. tf.Transform 분석기의 고정 세트를 제공하지만,이 향후 버전에서 확장 될 것입니다.

전처리 기능 예

분석기와 일반 TensorFlow 기능을 결합하여 사용자는 데이터 변환을 위한 유연한 파이프라인을 만들 수 있습니다. 다음 전처리 함수는 세 가지 기능을 각각 다른 방식으로 변환하고 두 가지 기능을 결합합니다.

import tensorflow as tf
import tensorflow_transform as tft
import tensorflow_transform.beam as tft_beam

def preprocessing_fn(inputs):
  x = inputs['x']
  y = inputs['y']
  s = inputs['s']
  x_centered = x - tft.mean(x)
  y_normalized = tft.scale_to_0_1(y)
  s_integerized = tft.compute_and_apply_vocabulary(s)
  x_centered_times_y_normalized = x_centered * y_normalized
  return {
      'x_centered': x_centered,
      'y_normalized': y_normalized,
      'x_centered_times_y_normalized': x_centered_times_y_normalized,
      's_integerized': s_integerized
  }

여기서, x , ys 있다 Tensor 의 입력 기능을 나타내는 즉. 생성되는 새로운 제 텐서 x_centered 적용하여 구축 tft.meanx 로부터 이것을 감산 x . tft.mean(x) 텐서의 평균 나타내는 텐서 반환 x . x_centered 텐서이고 x 의 평균과 감산.

두번째 새로운 텐서 y_normalized , 유사한 방식으로 만들었지 만 편의 방식 사용 tft.scale_to_0_1 . 이 방법은 컴퓨팅 비슷한 않습니다 x_centered 즉 최대 및 최소를 계산하고 규모에 이들을 사용하여, y .

텐서 s_integerized 방송 문자열 처리의 일례. 이 경우 문자열을 가져와 정수에 매핑합니다. 이 편의 기능 사용 tft.compute_and_apply_vocabulary . 이 함수는 분석기를 사용하여 입력 문자열에서 가져온 고유 값을 계산한 다음 TensorFlow 작업을 사용하여 입력 문자열을 고유 값 테이블의 인덱스로 변환합니다.

마지막 열은 TensorFlow 작업을 사용하여 텐서를 결합하여 새로운 기능을 생성할 수 있음을 보여줍니다.

전처리 기능은 데이터 세트에 대한 작업 파이프라인을 정의합니다. 파이프 라인을 적용하기 위해, 우리는의 구체적인 구현에 의존 tf.Transform API. 아파치 빔 구현은 제공 PTransform 데이터에 대한 사용자의 전처리 기능을 적용합니다. (A)의 일반적인 흐름 tf.Transform 사용자는 훈련 용 데이터를 생성하는 더 큰 빔이 파이프 라인을 포함하는 전처리 기능을 구성한다.

일괄 처리

일괄 처리는 TensorFlow의 중요한 부분입니다. 의 목표 중 하나 때문에 tf.Transform 서빙 그래프 (및 임의로 트레이닝 그래프)에 통합 될 수있는 전처리하는 TensorFlow 그래프를 제공하고, 배치로도 중요한 개념이다 tf.Transform .

위의 예에서 명확한 것은 아니지만, 사용자는 훈련 TensorFlow 봉사 중에 공교롭게도 함수 일괄 아닌 개별 인스턴스를 나타내는 텐서를 전달 전처리 정의. 반면에 분석기는 일괄 값이 아닌 단일 값을 반환하는 전체 데이터 세트에 대해 계산을 수행합니다. x A는 Tensor 의 형상 (batch_size,) 동안 tft.mean(x) A는 Tensor 의 형상 () . 감산 x - tft.mean(x) 방송의 값 여기서 tft.mean(x) 로 표시되는 배치의 각 요소로부터 감산 x .

아파치 빔 구현

전처리 기능을 복수의 데이터 처리 워크 구현 전처리 파이프 라인의 논리적 설명을 위해 마련되지만, tf.Transform 아파치 보 정식에 이용되는 구현을 제공한다. 이 구현은 구현에 필요한 기능을 보여줍니다. 이 기능에 대한 공식 API는 없으므로 각 구현은 특정 데이터 처리 프레임워크에 관용적인 API를 사용할 수 있습니다.

아파치 빔 구현은 두 제공 PTransform 전처리 함수의 처리에 사용되는 데이터. 다음 쇼 복합에 대한 사용 PTransform AnalyzeAndTransformDataset :

raw_data = [
    {'x': 1, 'y': 1, 's': 'hello'},
    {'x': 2, 'y': 2, 's': 'world'},
    {'x': 3, 'y': 3, 's': 'hello'}
]

raw_data_metadata = ...
transformed_dataset, transform_fn = (
    (raw_data, raw_data_metadata) | tft_beam.AnalyzeAndTransformDataset(
        preprocessing_fn))
transformed_data, transformed_metadata = transformed_dataset

transformed_data 내용은 아래와 원 데이터와 동일한 포맷으로 변환 된 열을 포함한다. 특히, 값 s_integerized 있다 [0, 1, 0] - 이러한 값들은 단어되었는지에 따라 helloworld 결정적 정수 매핑되었다. 컬럼이 들어 x_centered 열 값 그래서, 우리는 평균을 감산 x 하였다, [1.0, 2.0, 3.0] ,되었다 [-1.0, 0.0, 1.0] . 마찬가지로 나머지 열은 예상 값과 일치합니다.

[{u's_integerized': 0,
  u'x_centered': -1.0,
  u'x_centered_times_y_normalized': -0.0,
  u'y_normalized': 0.0},
 {u's_integerized': 1,
  u'x_centered': 0.0,
  u'x_centered_times_y_normalized': 0.0,
  u'y_normalized': 0.5},
 {u's_integerized': 0,
  u'x_centered': 1.0,
  u'x_centered_times_y_normalized': 1.0,
  u'y_normalized': 1.0}]

raw_datatransformed_data 데이터 세트입니다. 다음 두 섹션에서는 Beam 구현이 데이터 세트를 나타내는 방법과 데이터를 읽고 디스크에 쓰는 방법을 보여줍니다. 다른 리턴 값은 transform_fn 아래 자세히 설명 데이터에 적용될 변환을 나타낸다.

AnalyzeAndTransformDataset 구현에 의해 제공되는 두 가지 근본적인 변환의 조성물 AnalyzeDatasetTransformDataset . 따라서 다음 두 코드 조각은 동일합니다.

transformed_data, transform_fn = (
    my_data | tft_beam.AnalyzeAndTransformDataset(preprocessing_fn))
transform_fn = my_data | tft_beam.AnalyzeDataset(preprocessing_fn)
transformed_data = (my_data, transform_fn) | tft_beam.TransformDataset()

transform_fn 데이터 세트의 각 행에인가되는 동작을 나타내는 순수한 함수이다. 특히 분석기 값은 이미 계산되어 상수로 처리됩니다. 예에서, transform_fn 상수로 포함 된 칼럼의 평균 x , 최소 및 최대 칼럼의 y 및 정수의 문자열을 매핑하는 데 사용되는 용어.

의 중요한 기능 tf.Transform 점이다 transform_fn 순수한 기능은 개별적으로 각 행에 적용입니다 - 그것은 행을 통해지도를 나타냅니다. 집계 행에 대한 계산은 모두 이루어집니다 AnalyzeDataset . 또한, transform_fn TensorFlow로 표현되는 Graph 서빙 그래프에 삽입 될 수있다.

AnalyzeAndTransformDataset 이 특별한 경우에 최적화를 위해 제공됩니다. 이것에 사용되는 동일 패턴 배우기 scikit , 상기 제공 fit , transformfit_transform 방법.

데이터 형식 및 스키마

TFT Beam 구현은 두 가지 다른 입력 데이터 형식을 허용합니다. 은 "인스턴스 딕셔너리"형식 (위의 예에서와 같이 simple_example.py ) 직관적 형식이며 TFXIO (하면서 작은 셋에 적합 아파치 화살표 ) 형식은 개선 된 성능을 제공하며, 큰 데이터 세트 suitble이다.

Beam 구현은 입력 PCollection이 PCollection과 함께 제공되는 "메타데이터"에 의해 어떤 형식이 될 것인지 알려줍니다.

(raw_data, raw_data_metadata) | tft.AnalyzeDataset(...)
  • 경우 raw_data_metadata A는 dataset_metadata.DatasetMetadata (아래의 " '예 딕셔너리'포맷 '섹션)은 다음 raw_data 은"인스턴스 딕셔너리 "형식으로 될 것으로 예상된다.
  • 경우 raw_data_metadata A는 tfxio.TensorAdapterConfig (아래의 "TFXIO 형식"부분)은, 다음 raw_data TFXIO 형식으로 될 것으로 예상된다.

"인스턴스 딕셔너리" 형식

이전 코드 예에서, 정의 코드 raw_data_metadata 생략한다. 메타데이터에는 다양한 형식에서 읽고 쓸 수 있도록 데이터 레이아웃을 정의하는 스키마가 포함되어 있습니다. 마지막 섹션에 표시된 메모리 내 형식조차도 자체 설명되지 않으며 텐서로 해석되기 위해 스키마가 필요합니다.

다음은 예제 데이터의 스키마 정의입니다.

from tensorflow_transform.tf_metadata import dataset_metadata
from tensorflow_transform.tf_metadata import schema_utils

raw_data_metadata = dataset_metadata.DatasetMetadata(
      schema_utils.schema_from_feature_spec({
        's': tf.io.FixedLenFeature([], tf.string),
        'y': tf.io.FixedLenFeature([], tf.float32),
        'x': tf.io.FixedLenFeature([], tf.float32),
    }))

Schema 프로토는 텐서에, 그 디스크 나 메모리 형식의 데이터를 구문 분석하는 데 필요한 정보가 포함되어 있습니다. 그것은 일반적으로 호출하여 구성되어 schema_utils.schema_from_feature_spec 에 DICT 매핑 기능 키 tf.io.FixedLenFeature , tf.io.VarLenFeaturetf.io.SparseFeature 값. 에 대한 설명서를 참조하십시오 tf.parse_example 자세한 내용은.

우리가 사용하는 위의 tf.io.FixedLenFeature 각 기능이 경우, 하나의 스칼라 값을 값 고정 된 수의 포함되어 있음을 나타냅니다. 때문에 tf.Transform 배치의 경우, 실제 Tensor 기능을 나타내는 모양해야합니다 (None,) 알 수없는 차원이 배치 차원이다.

TFXIO 형식

이 형식의 데이터가 포함되는 것으로 예상된다 pyarrow.RecordBatch . 테이블 형식의 데이터를 들면, 우리의 아파치 빔 구현은 화살표 받아 RecordBatch 다음과 같은 유형의 컬럼으로 구성 말이지 :

  • pa.list_(<primitive>) 여기서 <primitive> 이다 pa.int64() , pa.float32() pa.binary() 또는 pa.large_binary() .

  • pa.large_list(<primitive>)

장난감 입력 데이터 세트는 우리가 위에서 사용하는로 표현하면 RecordBatch 다음과 같다 :

raw_data = [
    pa.record_batch([
        pa.array([[1], [2], [3]], pa.list_(pa.float32())),
        pa.array([[1], [2], [3]], pa.list_(pa.float32())),
        pa.array([['hello'], ['world'], ['hello']], pa.list_(pa.binary())),
    ], ['x', 'y', 's'])
]

DatasetMetadata 유사은 "인스턴스 DICT"형식을 동반하는 데 필요한되고하는 tfxio.TensorAdapterConfig 동반 할 필요가 RecordBatch 말이지. 그것은의 화살표 스키마 구성 RecordBatch ES 및 TensorRepresentations 고유로는 열 방법을 결정 RecordBatch ES는 TensorFlow 텐서 해석 (포함하지만 tf.Tensor, tf.SparseTensor에 국한되지 않음) 할 수 있습니다.

TensorRepresentations A는 Dict[Text, TensorRepresentation] 것을 텐서의 관계를 확립 preprocessing_fn 에 받아들이고 열 RecordBatch 에스. 예를 들어:

tensor_representation = {
    'x': text_format.Parse(
        """dense_tensor { column_name: "col1" shape { dim { size: 2 } } }"""
        schema_pb2.TensorRepresentation())
}

즉, inputs['x'] 에서 preprocessing_fn 치밀한되어야하는 값 이름 열에서 온 tf.Tensor, 'col1' 입력에 RecordBatch ES, 및 (일괄) 형상이어야 [batch_size, 2] .

TensorRepresentation 에 정의 Protobuf이다 TensorFlow 메타 .

TensorFlow와의 호환성

tf.Transform 수출 지원 제공 transform_fn 1.x의 TF 또는 TF 2.x를 SavedModel의 하나로서 상술한다. 사전이 기본 동작 0.30 릴리스는 TF 1.x에서의 SavedModel를 수출했다. 을 시작으로 0.30 릴리스, 기본 동작은 TF 2.x에서의 행동이 명시 적으로 사용하지 않는 한 (호출하여 TF 2.x에서의 SavedModel를 내보내는 것입니다 tf.compat.v1.disable_v2_behavior() 예를 들어).

같은 TF 1.x의 개념을 사용하는 경우 EstimatorsSessions , 당신은 전달하여 이전 동작을 유지할 수 force_tf_compat_v1=Truetft_beam.Context 사용하는 경우 tf.Transform 독립 라이브러리로하거나 변환 TFX에서 구성 요소입니다.

수출 때 transform_fn TF의 2.x는 SavedModel 등을 상기 preprocessing_fn 이용 추적 할 것으로 예상된다 tf.function . 원격으로 파이프 라인을 실행하는 경우 또한합니다 (로 예를 들어 DataflowRunner )에 있는지 확인 preprocessing_fn 설명 및 종속성이 제대로 포장되어 여기 .

사용하여 문제를 알려진 tf.Transform SavedModel 문서화되어 TF 2.x를 내보내려면 여기를 .

Apache Beam을 사용한 입력 및 출력

지금까지, 우리는 (의 파이썬 목록의 입력 및 출력 데이터를 본 적이 RecordBatch ES 또는 인스턴스 사전). 이 목록뿐만 아니라 데이터의 주요 표현의와 함께 작동하도록 아파치 빔의 능력에 의존하는 단순화 PCollection .

PCollection 빔 파이프 라인의 일부를 형성하는 데이터의 표현이다. 빔 파이프 라인은 다양한 도포함으로써 형성된다 PTransform 포함한들 AnalyzeDatasetTransformDataset , 파이프 라인 실행. PCollection 주 이진 메모리에서 생성되지 않고, 대신에 (이 부분은 메모리 실행 모드를 사용하지만) 노동자들 사이에 분배된다.

사전 통조림 PCollection 소스 ( TFXIO )

RecordBatch 우리의 구현이 수락하는 형식은 다른 TFX 라이브러리가 동의하는 일반적인 형식입니다. 따라서 TFX 이벤트 편리 (일명 "소스" TFXIO 디스크 및 생산에 다양한 형식의 파일을 읽을 수) RecordBatch ES도 줄 수 TensorAdapterConfig 추론 포함 TensorRepresentations .

TFXIO 들 패키지에서 찾을 수 있습니다 tfx_bsl ( tfx_bsl.public.tfxio ).

예: "인구 조사 소득" 데이터세트

다음 예는 읽기와 디스크에 데이터를 기록하고, 같은 데이터를 나타내는 둘 필요 PCollection (안 목록)을 참조하십시오 census_example.py . 아래에서는 데이터를 다운로드하고 이 예제를 실행하는 방법을 보여줍니다. 은 "인구 소득"데이터 집합에 의해 제공되는 UCI 기계 학습 저장소 . 이 데이터 세트에는 범주형 데이터와 숫자 데이터가 모두 포함되어 있습니다.

데이터는 CSV 형식이며 처음 두 줄은 다음과 같습니다.

39, State-gov, 77516, Bachelors, 13, Never-married, Adm-clerical, Not-in-family, White, Male, 2174, 0, 40, United-States, <=50K
50, Self-emp-not-inc, 83311, Bachelors, 13, Married-civ-spouse, Exec-managerial, Husband, White, Male, 0, 0, 13, United-States, <=50K

데이터세트의 열은 범주형 또는 숫자형입니다. 이 데이터 세트는 분류 문제를 설명합니다. 개인이 연간 5만 달러 이상 또는 이하를 버는 마지막 열을 예측합니다. 그러나의 관점에서 tf.Transform ,이 레이블은 또 다른 범주 열입니다.

우리는 사전 통조림 사용 TFXIO , BeamRecordCsvTFXIO 에 CSV 라인 번역 RecordBatches . TFXIO 정보의 두 가지 중요한 부분이 필요합니다

  • TensorFlow 메타 데이터 스키마 각 CSV 컬럼에 대한 유형과 형태 정보가 포함되어 있습니다. TensorRepresentation 들 스키마의 선택적 부분입니다; 제공되지 않으면(이 예의 경우) 유형 및 모양 정보에서 유추됩니다. 하나는 우리가 (이 예에서와 같이) TF 분석 사양에서 번역을 제공하는 도우미 함수를 사용하거나 실행하여 하나 스키마를 얻을 수 있습니다 TensorFlow 데이터 유효성 검사를 .

  • CSV 파일에 나타나는 순서대로 열 이름 목록입니다. 이러한 이름은 스키마의 기능 이름과 일치해야 합니다.

이 예에서 우리는 수 있도록 education-num 기능이 누락 될 수 있습니다. 그것이로서 표현되는 이러한 수단 tf.io.VarLenFeature feature_spec에서와 같은 tf.SparseTensorpreprocessing_fn . 기타 특징으로는 될 것 tf.Tensor 에서의 같은 이름의를 preprocessing_fn .

csv_tfxio = tfxio.BeamRecordCsvTFXIO(
    physical_format='text', column_names=ordered_columns, schema=SCHEMA)

record_batches = (
    p
    | 'ReadTrainData' >> textio.ReadFromText(train_data_file)
    | ...  # fix up csv lines
    | 'ToRecordBatches' >> csv_tfxio.BeamSource())

tensor_adapter_config = csv_tfxio.TensorAdapterConfig()

. 주 우리는 CSV 선 후 몇 가지 추가 수정 업을 읽을해야했던 것을 그렇지 않으면, 우리는에 의존 할 수 CsvTFXIO 모두 파일을 읽고에 번역 처리 할 수 RecordBatch ES :

csv_tfxio = tfxio.CsvTFXIO(train_data_file, column_name=ordered_columns,
                           schema=SCHEMA)
record_batches = p | 'TFXIORead' >> csv_tfxio.BeamSource()
tensor_adapter_config = csv_tfxio.TensorAdapterConfig()

전처리는 각 열을 수동으로 지정하는 대신 전처리 기능이 프로그래밍 방식으로 생성된다는 점을 제외하고 이전 예와 유사합니다. 아래의 전처리 함수에서 NUMERICAL_COLUMNSCATEGORICAL_COLUMNS 숫자 및 범주 열 이름을 포함하는 목록은 다음과 같습니다 :

def preprocessing_fn(inputs):
  """Preprocess input columns into transformed columns."""
  # Since we are modifying some features and leaving others unchanged, we
  # start by setting `outputs` to a copy of `inputs.
  outputs = inputs.copy()

  # Scale numeric columns to have range [0, 1].
  for key in NUMERIC_FEATURE_KEYS:
    outputs[key] = tft.scale_to_0_1(outputs[key])

  for key in OPTIONAL_NUMERIC_FEATURE_KEYS:
    # This is a SparseTensor because it is optional. Here we fill in a default
    # value when it is missing.
      sparse = tf.sparse.SparseTensor(outputs[key].indices, outputs[key].values,
                                      [outputs[key].dense_shape[0], 1])
      dense = tf.sparse.to_dense(sp_input=sparse, default_value=0.)
    # Reshaping from a batch of vectors of size 1 to a batch to scalars.
    dense = tf.squeeze(dense, axis=1)
    outputs[key] = tft.scale_to_0_1(dense)

  # For all categorical columns except the label column, we generate a
  # vocabulary but do not modify the feature.  This vocabulary is instead
  # used in the trainer, by means of a feature column, to convert the feature
  # from a string to an integer id.
  for key in CATEGORICAL_FEATURE_KEYS:
    tft.vocabulary(inputs[key], vocab_filename=key)

  # For the label column we provide the mapping from string to index.
  initializer = tf.lookup.KeyValueTensorInitializer(
      keys=['>50K', '<=50K'],
      values=tf.cast(tf.range(2), tf.int64),
      key_dtype=tf.string,
      value_dtype=tf.int64)
  table = tf.lookup.StaticHashTable(initializer, default_value=-1)

  outputs[LABEL_KEY] = table.lookup(outputs[LABEL_KEY])

  return outputs

이전 예와의 한 가지 차이점은 레이블 열이 문자열에서 인덱스로의 매핑을 수동으로 지정한다는 것입니다. 그래서 '>50' 에 매핑되는 0'<=50K' 에 매핑되는 1 는 훈련 모델의 대응에 어떤 인덱스 라벨을 알고 유용하기 때문이다.

record_batches 변수가 나타내는 PCollectionpyarrow.RecordBatch ES를. tensor_adapter_config 주어진다 csv_tfxio 추론된다 SCHEMA 합니다 (TF 파싱 사양에서, 본 실시 예에서, 그리고 궁극적으로).

마지막 단계는 변환된 데이터를 디스크에 쓰는 것으로 원시 데이터를 읽는 것과 유사한 형태를 갖는다. 이렇게 사용 된 스키마의 출력의 일부 AnalyzeAndTransformDataset 출력 데이터 스키마를 추론한다. 디스크에 쓰는 코드는 다음과 같습니다. 스키마는 메타 데이터의 일부이지만의 상호 교환이 둘을 사용 tf.Transform API (즉,이에 대한 메타 데이터를 통과 ExampleProtoCoder ). 이것은 다른 형식으로 씁니다. 대신에 textio.WriteToText , 사용 빔 년대에 대한 지원 내장 TFRecord 형식과 같은 데이터를 인코딩하는 코더를 사용하는 Example PROTOS을. 이것은 다음 섹션에 나와 있는 것처럼 훈련에 사용하기에 더 좋은 형식입니다. transformed_eval_data_base 기록 된 각각의 파편의 기본 파일 이름을 제공합니다.

transformed_data | "WriteTrainData" >> tfrecordio.WriteToTFRecord(
    transformed_eval_data_base,
    coder=tft.coders.ExampleProtoCoder(transformed_metadata))

학습 데이터뿐만 아니라, transform_fn 또한 메타 데이터로 기록됩니다 :

_ = (
    transform_fn
    | 'WriteTransformFn' >> tft_beam.WriteTransformFn(working_dir))
transformed_metadata | 'WriteMetadata' >> tft_beam.WriteMetadata(
    transformed_metadata_file, pipeline=p)

와 전체 빔 파이프 라인 실행 p.run().wait_until_finish() . 이 시점까지 Beam 파이프라인은 지연된 분산 계산을 나타냅니다. 수행할 작업에 대한 지침을 제공하지만 지침이 실행되지 않았습니다. 이 마지막 호출은 지정된 파이프라인을 실행합니다.

인구 조사 데이터 세트 다운로드

다음 셸 명령을 사용하여 인구 조사 데이터 세트를 다운로드합니다.

  wget https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data
  wget https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.test

실행중인 경우 census_example.py 스크립트를 첫 번째 인수로이 데이터를 포함하는 디렉토리를 전달합니다. 스크립트는 사전 처리된 데이터를 추가하기 위해 임시 하위 디렉터리를 만듭니다.

TensorFlow 교육과 통합

의 마지막 부분 census_example.py 전처리 된 데이터는 모델을 학습하는 데 사용되는 방법을 보여줍니다. 참고 항목 추정량 문서 세부 사항을. 첫 번째 단계는 구축하는 Estimator 전처리 열의 설명을 필요로한다. 각각의 숫자 열로는 설명 real_valued_column 고정 크기 (치밀한 벡터 래퍼 인 1 이러한 예에서). 각 범주 열은 정수로 문자열에서 매핑 된 다음에 전달됩니다 indicator_column . tft.TFTransformOutput 각 범주 기능에 대한 어휘 파일 경로를 찾는 데 사용됩니다.

real_valued_columns = [feature_column.real_valued_column(key)
                       for key in NUMERIC_FEATURE_KEYS]

one_hot_columns = [
    tf.feature_column.indicator_column(
        tf.feature_column.categorical_column_with_vocabulary_file(
            key=key,
            vocabulary_file=tf_transform_output.vocabulary_file_by_name(
                vocab_filename=key)))
    for key in CATEGORICAL_FEATURE_KEYS]

estimator = tf.estimator.LinearClassifier(real_valued_columns + one_hot_columns)

다음 단계는 훈련 및 평가를 위한 입력 함수를 생성하는 빌더를 만드는 것입니다. 에 의해 사용되는 훈련에서 상이 tf.Learn 기능 사양 이후는 변환 된 데이터를 분석 할 필요가 없다. 대신 변환된 데이터의 메타데이터를 사용하여 기능 사양을 생성하십시오.

def _make_training_input_fn(tf_transform_output, transformed_examples,
                            batch_size):
  ...
  def input_fn():
    """Input function for training and eval."""
    dataset = tf.data.experimental.make_batched_features_dataset(
        ..., tf_transform_output.transformed_feature_spec(), ...)

    transformed_features = tf.compat.v1.data.make_one_shot_iterator(
        dataset).get_next()
    ...

  return input_fn

나머지 코드는 사용하는 것과 같습니다 Estimator 클래스를. 이 예는도에서 모델을 수출하는 코드가 포함되어 SavedModel 형식을. 내 보낸 모델에서 사용할 수있는 Tensorflow 서빙 또는 클라우드 ML 엔진 .