SIG TFX-Addons 커뮤니티에 가입하고 TFX를 더욱 향상시키는 데 도움을 주세요! SIG TFX 애드온 가입

Tensorflow 모델 분석 아키텍처

개요

TFMA (TensorFlow Model Analysis) 파이프 라인은 다음과 같이 표시됩니다.

TFMA 파이프 라인

파이프 라인은 다음 네 가지 주요 구성 요소로 구성됩니다.

  • 입력 읽기
  • 추출
  • 평가
  • 결과 쓰기

이러한 구성 요소는 tfma.Extractstfma.evaluators.Evaluation 의 두 가지 기본 유형을 사용합니다. tfma.Extracts 유형은 파이프 라인 처리 중에 추출 된 데이터를 나타내는 반면 tfma.evaluators.Evaluation 유형은 추출 프로세스 중 다양한 지점에서 추출을 평가 한 결과를 나타냅니다. 유연한 API를 제공하기 위해 이러한 유형은 다른 구현에서 키가 정의 된 (사용을 위해 예약 된) 딕셔너리 일뿐입니다. 유형은 다음과 같이 정의됩니다.

# Extracts represent data extracted during pipeline processing.
# For example, the PredictExtractor stores the data for the
# features, labels, and predictions under the keys "features",
# "labels", and "predictions".
Extracts = Dict[Text, Any]

# Evaluation represents the output from evaluating extracts at
# particular point in the pipeline. The evaluation outputs are
# keyed by their associated output type. For example, the metric / plot
# dictionaries from evaluating metrics and plots will be stored under
# "metrics" and "plots" respectively.
Evaluation = Dict[Text, beam.pvalue.PCollection]

tfma.Extracts 는 직접 작성되지 않으며 항상 평가자를 거쳐 작성되는 tfma.evaluators.Evaluation 을 생성해야합니다. 또한 tfma.Extractsbeam.pvalue.PCollection (즉, beam.PTransform 은 입력으로 beam.pvalue.PCollection[tfma.Extracts] )에 저장된 dicts 인 반면 tfma.evaluators.Evaluation 은 해당 값을 갖는 dict입니다. beam.pvalue.PCollection (즉, beam.PTransform 은 dict 자체를 beam.value.PCollection 입력에 대한 인수로 beam.value.PCollection 합니다). 즉, tfma.evaluators.Evaluation 은 파이프 라인 구성 시간에 사용되지만 tfma.Extracts 는 파이프 라인 런타임에 사용됩니다.

입력 읽기

ReadInputs 단계는 원시 입력 (tf.train.Example, CSV, ...)을 가져와 추출로 변환하는 변환으로 구성됩니다. 원시 입력에 저장 바이트로 현재는 추출물을 표현 tfma.INPUT_KEY 그러나, 추출물은 추출 파이프 라인과 호환되는 임의의 형태 일 수있다 -이 생성 의미 tfma.Extracts 출력으로하고, 그 추출물을 하류와 호환되는지 추출기. 필요한 것을 명확하게 문서화하는 것은 다른 추출기에 달려 있습니다.

추출

추출 프로세스는 직렬로 실행되는 beam.PTransform 의 목록입니다. 추출기는 tfma.Extracts 를 입력으로 사용하고 tfma.Extracts 를 출력으로 반환합니다. 프로토 타입 추출기는 tfma.extractors.PredictExtractor 로, 읽기 입력 변환에 의해 생성 된 입력 추출을 사용하고 모델을 통해 실행하여 예측 추출을 생성합니다. 사용자 지정 추출기는 변환이 tfma.Extracts in 및 tfma.Extracts out API를 준수하는 경우 언제든지 삽입 할 수 있습니다. 추출기는 다음과 같이 정의됩니다.

# An Extractor is a PTransform that takes Extracts as input and returns
# Extracts as output. A typical example is a PredictExtractor that receives
# an 'input' placeholder for input and adds additional 'predictions' extracts.
Extractor = NamedTuple('Extractor', [
    ('stage_name', Text),
    ('ptransform', beam.PTransform)])  # Extracts -> Extracts

매우 특별한 경우를 제외하고는 거의 항상 tfma.Extracts 에있는 하나의 beam.pvalue.PCollection 가 모델의 하나의 예제에 해당하는 경우입니다.

InputExtractor

tfma.extractors.InputExtractor 는 메트릭 분할 및 계산에 사용하기 위해 tf.train.Example 레코드에서 원시 특성, 원시 레이블 및 원시 예제 가중치를 추출하는 데 사용됩니다. 기본적으로 값은 각각 추출 키 features , labelsexample_weights 아래에 저장됩니다. 단일 출력 모델 레이블 및 예제 가중치는 np.ndarray 값으로 직접 저장됩니다. 다중 출력 모델 레이블 및 예제 가중치는 np.ndarray 값의 사전 (출력 이름으로 입력)으로 저장됩니다. 다중 모델 평가가 수행되면 레이블과 예제 가중치가 다른 딕셔너리 (모델 이름으로 입력 됨) 내에 추가로 포함됩니다.

PredictExtractor

tfma.extractors.PredictExtractor 는 모델 예측을 실행하고 tfma.Extracts dict의 주요 predictions 아래에 저장합니다. 단일 출력 모델 예측은 예측 된 출력 값으로 직접 저장됩니다. 다중 출력 모델 예측은 출력 값의 사전 (출력 이름으로 입력)으로 저장됩니다. 다중 모델 평가가 수행되면 예측이 다른 dict (모델 이름으로 입력 됨)에 추가로 포함됩니다. 사용되는 실제 출력 값은 모델에 따라 다릅니다 (예 : TF 추정 자의 반환 출력은 dict 형식으로 표시되는 반면 keras는 np.ndarray 값을 반환합니다).

SliceKeyExtractor

tfma.extractors.SliceKeyExtractor 는 슬라이싱 사양을 사용하여 추출 된 기능을 기반으로 각 예제 입력에 적용되는 슬라이스를 결정하고 평가자가 나중에 사용할 수 있도록 tfma.extractors.SliceKeyExtractor 에 해당하는 슬라이싱 값을 추출에 추가합니다.

평가

평가는 추출물을 채취하여 평가하는 과정입니다. 추출 파이프 라인의 끝에서 평가를 수행하는 것이 일반적이지만 추출 프로세스 초기에 평가가 필요한 사용 사례가 있습니다. 이러한 평가자는 출력을 평가해야하는 추출기와 연관됩니다. 평가자는 다음과 같이 정의됩니다.

# An evaluator is a PTransform that takes Extracts as input and
# produces an Evaluation as output. A typical example of an evaluator
# is the MetricsAndPlotsEvaluator that takes the 'features', 'labels',
# and 'predictions' extracts from the PredictExtractor and evaluates
# them using post export metrics to produce metrics and plots dictionaries.
Evaluator = NamedTuple('Evaluator', [
  ('stage_name', Text),
  ('run_after', Text),              # Extractor.stage_name
  ('ptransform', beam.PTransform)]) # Extracts -> Evaluation

평가자는 tfma.Extracts 를 입력으로 사용하는 beam.PTransform 입니다. 평가 프로세스의 일부로 추출에서 추가 변환을 수행하는 구현을 중단 할 수 없습니다. tfma.Extracts dict를 반환해야하는 추출기와 달리, 대부분의 평가자가 dict (예 : 메트릭 이름 및 값)도 반환하지만 평가자가 생성 할 수있는 출력 유형에는 제한이 없습니다.

MetricsAndPlotsEvaluator

tfma.evaluators.MetricsAndPlotsEvaluatorfeatures , labelspredictions 을 입력으로 tfma.slicer.FanoutSlices 를 통해 실행하여 슬라이스별로 그룹화 한 다음 메트릭을 수행하고 계산을 플로팅합니다. 메트릭 사전 형식으로 출력을 생성하고 키와 값을 플로팅합니다 (이는 나중에 tfma.writers.MetricsAndPlotsWriter 출력을 위해 직렬화 된 tfma.writers.MetricsAndPlotsWriter 로 변환 tfma.writers.MetricsAndPlotsWriter ).

결과 쓰기

WriteResults 단계는 평가 출력이 디스크에 기록되는 곳입니다. WriteResults는 작성기를 사용하여 출력 키를 기반으로 데이터를 작성합니다. 예를 들어, tfma.evaluators.Evaluation 에는 metricsplots 대한 키가 포함될 수 있습니다. 그런 다음 이러한 항목은 '메트릭'및 '플롯'이라는 메트릭 및 플롯 사전과 연결됩니다. 작성자는 각 파일을 작성하는 방법을 지정합니다.

# A writer is a PTransform that takes evaluation output as input and
# serializes the associated PCollections of data to a sink.
Writer = NamedTuple('Writer', [
  ('stage_name', Text),
  ('ptransform', beam.PTransform)])    # Evaluation -> PDone

MetricsAndPlotsWriter

메트릭을 변환하고 사전을 직렬화 된 tfma.writers.MetricsAndPlotsWriter 로 플로팅하고 디스크에 쓰는 tfma.writers.MetricsAndPlotsWriter 를 제공합니다.

다른 직렬화 형식을 사용하려면 사용자 지정 작성기를 만들고 대신 사용할 수 있습니다. 작성자에게 전달 된 tfma.evaluators.Evaluation 에는 결합 된 모든 평가자에 대한 출력이 포함되어 있으므로 작성자가 ptransform 구현에서 사용할 수있는 적절한 beam.PCollection 을 선택할 수있는 tfma.writers.Write 도우미 변환이 제공됩니다. 출력 키 (예는 아래 참조).

커스터마이징

tfma.run_model_analysis 방법은 소요 extractors , evaluatorswriters 파이프 라인에서 사용하는 추출기, 평가자 및 작가를 customing에 대한 인수를. 인수가 제공되지 않으면 tfma.default_extractors , tfma.default_evaluatorstfma.default_writers 가 기본적으로 사용됩니다.

사용자 지정 추출기

맞춤 추출기를 생성하기 위해, 생성 tfma.extractors.Extractor 감싸는 형태 beam.PTransform 복용 tfma.Extracts 입력으로하고 복귀 tfma.Extracts 출력으로한다. 추출기의 예는 tfma.extractors 아래에 tfma.extractors .

맞춤형 평가자

사용자 지정 평가 tfma.evaluators.Evaluator 만들려면 tfma.Extracts 를 입력으로 사용하고 tfma.evaluators.Evaluation 을 출력으로 반환하는 beam.PTransform 을 래핑하는 beam.PTransform 유형을 만듭니다. 매우 기본적인 평가자는 들어오는 tfma.Extracts 가져 와서 테이블에 저장하기 위해 출력 할 수 있습니다. 이것이 바로 tfma.evaluators.AnalysisTableEvaluator 일입니다. 더 복잡한 평가자는 추가 처리 및 데이터 집계를 수행 할 수 있습니다. 예제로 tfma.evaluators.MetricsAndPlotsEvaluator 를 참조하십시오.

tfma.evaluators.MetricsAndPlotsEvaluator 자체는 사용자 지정 메트릭을 지원하도록 사용자 지정할 수 있습니다 (자세한 내용은 메트릭 참조).

커스텀 라이터

사용자 지정 작가를 만들려면 만들 tfma.writers.Writer 랩 타입 beam.PTransform 촬영 tfma.evaluators.Evaluation 입력 및 반환 등의 beam.pvalue.PDone 출력으로합니다. 다음은 메트릭이 포함 된 TFRecord를 작성하기위한 작성기의 기본 예입니다.

tfma.writers.Writer(
  stage_name='WriteTFRecord(%s)' % tfma.METRICS_KEY,
  ptransform=tfma.writers.Write(
    key=tfma.METRICS_KEY,
    ptransform=beam.io.WriteToTFRecord(file_path_prefix=output_file))

작가의 입력은 관련 평가자의 출력에 따라 다릅니다. 위의 예에서 출력은 tfma.evaluators.MetricsAndPlotsEvaluator 의해 생성 된 직렬화 된 프로토 tfma.evaluators.MetricsAndPlotsEvaluator 입니다. 에 대한 작가 tfma.evaluators.AnalysisTableEvaluator 밖으로 쓰기에 대한 책임 것 beam.pvalue.PCollectiontfma.Extracts .

작성자는 사용 된 출력 키 (예 : tfma.METRICS_KEY , tfma.ANALYSIS_KEY 등)를 통해 평가자의 출력과 연결됩니다.

단계별 예제

다음은 tfma.evaluators.MetricsAndPlotsEvaluatortfma.evaluators.AnalysisTableEvaluator 모두 사용할 때 추출 및 평가 파이프 라인에 관련된 단계의 예입니다.

run_model_analysis(
    ...
    extractors=[
        tfma.extractors.InputExtractor(...),
        tfma.extractors.PredictExtractor(...),
        tfma.extractors.SliceKeyExtrator(...)
    ],
    evaluators=[
        tfma.evaluators.MetricsAndPlotsEvaluator(...),
        tfma.evaluators.AnalysisTableEvaluator(...)
    ])

ReadInputs

# Out
Extracts {
  'input': bytes                 # CSV, Proto, ...
}

ExtractAndEvaluate

# In:  ReadInputs Extracts
# Out:
Extracts {
  'input': bytes                    # CSV, Proto, ...
  'features': tensor_like           # Raw features
  'labels': tensor_like             # Labels
  'example_weights': tensor_like    # Example weights
}
# In:  InputExtractor Extracts
# Out:
Extracts {
  'input': bytes                    # CSV, Proto, ...
  'features': tensor_like           # Raw features
  'labels': tensor_like             # Labels
  'example_weights': tensor_like    # Example weights
  'predictions': tensor_like        # Predictions
}
# In: PredictExtractor Extracts
# Out:
Extracts {
  'features': tensor_like           # Raw features
  'labels': tensor_like             # Labels
  'example_weights': tensor_like    # Example weights
  'predictions': tensor_like        # Predictions
  'slice_key': Tuple[bytes...]      # Slice
}
# In: SliceKeyExtractor Extracts
# Out:
Evaluation {
  'metrics': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]]  # Tuples of (slice key, dictionary from metric key to metric values)
  'plots': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]]  # Tuples of (slice key, dictionary from plot key to plot values)
}
# In: SliceKeyExtractor Extracts
# Out:
Evaluation {
  'analysis': PCollection[Extracts] # Final Extracts
}

WriteResults

# In:
Evaluation {
  'metrics': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]]  # Tuples of (slice key, dictionary from metric key to metric values)
  'plots': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]]  # Tuples of (slice key, dictionary from plot key to plot values)
  'analysis': PCollection[Extracts] # Final Extracts
}
# Out: metrics, plots, and analysis files