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

Tensorflow 모델 분석 자주 묻는 질문

일반적인

EvalSavedModel이 여전히 필요합니까?

이전 TFMA는 특별한 사용 tensorflow 그래프에 저장되는 모든 측정 요구 EvalSavedModel . 지금, 측정 항목은 사용 TF 그래프 외부 계산 될 수 beam.CombineFn 구현.

주요 차이점 중 일부는 다음과 같습니다.

  • EvalSavedModel 서빙 모델이 훈련 코드에 필요한 변경없이 사용할 수있는 반면 트레이너의 특별 수출을 필요로한다.
  • EvalSavedModel 사용되는 시간을 훈련에 추가 된 지표는 평가 시간에 자동으로 사용할 수 있습니다. 없이 EvalSavedModel 이러한 측정은 다시 추가해야합니다.
    • 이 규칙의 예외는 keras 모델이 사용되는 경우 keras가 저장된 모델과 함께 메트릭 정보를 저장하기 때문에 메트릭도 자동으로 추가될 수 있다는 것입니다.

TFMA는 그래프 내 측정항목과 외부 측정항목 모두와 함께 작동할 수 있습니까?

TFMA를 사용하면 일부 메트릭은 그래프 내에서 계산할 수 있고 다른 메트릭은 외부에서 계산할 수 있는 하이브리드 접근 방식을 사용할 수 있습니다. 당신이 현재있는 경우 EvalSavedModel 당신은 계속 사용할 수 있습니다.

두 가지 경우가 있습니다.

  1. 사용 TFMA EvalSavedModel 특징 추출 및 통계 계산뿐만 아니라 추가 결합기 기반 메트릭을 추가 모두. 이 경우 당신은 모든 인 - 그래프 측정 얻을 것 EvalSavedModel 하지 이전에 지원 된 결합기 기반이 힘에서 추가 측정과 함께.
  2. 사용 TFMA EvalSavedModel 모든 메트릭 계산에 대한 기능 / 예측 추출하지만, 사용 결합기을 바탕으로 측정합니다. 에 존재하는 기능 변환이있는 경우이 모드는 유용 EvalSavedModel 당신이 깔끔히을 위해 사용하지만, 그래프 이외의 모든 통계 계산을 수행하는 것을 선호하고 싶다고.

설정

지원되는 모델 유형은 무엇입니까?

(사용 케이스에 따라 기반 모델이 필요할 수 있지만, 추정기 웰 TF 추정기 기반 모델로서 TFMA 지원 keras 모델 일반 TF2 서명 API에 대한 기초 모델 EvalSavedModel 사용되는).

참조 get_started 모델 지원되는 유형 및 제한 사항의 전체 목록에 대한 가이드.

네이티브 케라스 기반 모델과 함께 작동하도록 TFMA를 어떻게 설정합니까?

다음은 다음 가정을 기반으로 하는 keras 모델의 구성 예입니다.

  • 저장된 모델 봉사하고 서명 이름 사용 serving_default (이것은 변경할 수있다 model_specs[0].signature_name ).
  • 에서 측정 내장 model.compile(...) 평가되어야한다 (이 통해 비활성화 할 수 있습니다 options.include_default_metrictfma.EvalConfig ).
from google.protobuf import text_format

config = text_format.Parse("""
  model_specs {
    label_key: "<label-key>"
    example_weight_key: "<example-weight-key>"
  }
  metrics_specs {
    # Add metrics here. For example:
    #  metrics { class_name: "ConfusionMatrixPlot" }
    #  metrics { class_name: "CalibrationPlot" }
  }
  slicing_specs {}
""", tfma.EvalConfig())

참조 메트릭을 구성 할 수 있습니다 메트릭의 다른 유형에 대한 자세한 내용은.

일반 TF2 서명 기반 모델과 함께 작동하도록 TFMA를 어떻게 설정합니까?

다음은 일반 TF2 모델의 구성 예입니다. 다음, signature_name 평가를 위해 사용되어야하는 특정 서명의 이름입니다.

from google.protobuf import text_format

config = text_format.Parse("""
  model_specs {
    signature_name: "<signature-name>"
    label_key: "<label-key>"
    example_weight_key: "<example-weight-key>"
  }
  metrics_specs {
    # Add metrics here. For example:
    #  metrics { class_name: "BinaryCrossentropy" }
    #  metrics { class_name: "ConfusionMatrixPlot" }
    #  metrics { class_name: "CalibrationPlot" }
  }
  slicing_specs {}
""", tfma.EvalConfig())

참조 메트릭을 구성 할 수 있습니다 메트릭의 다른 유형에 대한 자세한 내용은.

추정기 기반 모델과 함께 작동하도록 TFMA를 설정하려면 어떻게 해야 합니까?

이 경우 세 가지 선택이 있습니다.

옵션 1: 게재 모델 사용

이 옵션을 사용하는 경우 교육 중에 추가된 메트릭은 평가에 포함되지 않습니다.

다음은 가정 config (설정) 예입니다 serving_default 서명 이름이 사용됩니다 :

from google.protobuf import text_format

config = text_format.Parse("""
  model_specs {
    label_key: "<label-key>"
    example_weight_key: "<example-weight-key>"
  }
  metrics_specs {
    # Add metrics here.
  }
  slicing_specs {}
""", tfma.EvalConfig())

참조 메트릭을 구성 할 수 있습니다 메트릭의 다른 유형에 대한 자세한 내용은.

옵션 2: 추가 결합기 기반 메트릭과 함께 EvalSavedModel 사용

이 경우, 사용 EvalSavedModel 모두 기능 / 예상 추출 및 평가와 같은 추가 결합기 기반 메트릭을 추가한다.

다음은 구성의 예입니다.

from google.protobuf import text_format

config = text_format.Parse("""
  model_specs {
    signature_name: "eval"
  }
  metrics_specs {
    # Add metrics here.
  }
  slicing_specs {}
""", tfma.EvalConfig())

참조 메트릭을 구성 할 수 있습니다 메트릭의 다른 유형에 대한 자세한 내용은 EvalSavedModel EvalSavedModel 설정에 대한 자세한 내용은.

옵션 3: 기능/예측 추출에만 EvalSavedModel 모델 사용

옵션 (2)와 유사하지만 사용 EvalSavedModel 기능 / 예측 추출. 이 옵션은 외부 메트릭만 필요하지만 조각으로 삼고 싶은 기능 변환이 있는 경우에 유용합니다. 옵션 (1)과 유사하게 교육 중에 추가된 메트릭은 평가에 포함되지 않습니다.

이 경우의 구성은 상기와 동일하다 include_default_metrics 비활성화된다.

from google.protobuf import text_format

config = text_format.Parse("""
  model_specs {
    signature_name: "eval"
  }
  metrics_specs {
    # Add metrics here.
  }
  slicing_specs {}
  options {
    include_default_metrics { value: false }
  }
""", tfma.EvalConfig())

참조 메트릭을 구성 할 수 있습니다 메트릭의 다른 유형에 대한 자세한 내용은 EvalSavedModel EvalSavedModel 설정에 대한 자세한 내용은.

keras 모델 대 추정기 기반 모델과 함께 작동하도록 TFMA를 어떻게 설정합니까?

keras model_to_estimator 설정은 추정의 confiugration 유사하다. 그러나 모델 대 추정기의 작동 방식에 따라 몇 가지 차이점이 있습니다. 특히 model-to-esimtator는 dict 키가 연결된 keras 모델의 마지막 출력 레이어 이름인 dict 형식으로 출력을 반환합니다(이름이 제공되지 않으면 keras가 기본 이름을 선택합니다. 예컨대 dense_1 또는 output_1 ). TFMA 관점에서 이 동작은 추정할 모델이 단일 모델에 대한 것일지라도 다중 출력 모델에 대해 출력되는 것과 유사합니다. 이 차이를 설명하려면 출력 이름을 설정하는 추가 단계가 필요합니다. 그러나 동일한 세 가지 옵션이 추정기로 적용됩니다.

다음은 추정기 기반 구성에 필요한 변경 사항의 예입니다.

from google.protobuf import text_format

config = text_format.Parse("""
  ... as for estimator ...
  metrics_specs {
    output_names: ["<keras-output-layer>"]
    # Add metrics here.
  }
  ... as for estimator ...
""", tfma.EvalConfig())

미리 계산된(즉, 모델에 구애받지 않는) 예측과 함께 작동하도록 TFMA를 설정하려면 어떻게 해야 합니까? ( TFRecordtf.Example )

미리 계산 된 예측과 작업을 구성 TFMA하기 위해, 기본 tfma.PredictExtractor 장애인이어야하며 tfma.InputExtractor 다른 입력 기능과 함께 예측을 분석하도록 구성해야합니다. 이것은 구성하여 수행됩니다 tfma.ModelSpec 라벨 및 무게와 함께 예측에 사용되는 기능 키의 이름으로.

다음은 설정 예입니다.

from google.protobuf import text_format

config = text_format.Parse("""
  model_specs {
    prediction_key: "<prediction-key>"
    label_key: "<label-key>"
    example_weight_key: "<example-weight-key>"
  }
  metrics_specs {
    # Add metrics here.
  }
  slicing_specs {}
""", tfma.EvalConfig())

참조 메트릭 구성 할 수 있습니다 통계에 대한 자세한 정보를.

입력해도 있습니다 tfma.ModelSpec 구성되고있는 모델이 실제로 사용되지 않는 (즉, 더 없다 tfma.EvalSharedModel ). 모델 분석을 실행하기 위한 호출은 다음과 같을 수 있습니다.

eval_result = tfma.run_model_analysis(
    eval_config=eval_config,
    # This assumes your data is a TFRecords file containing records in the
    # tf.train.Example format.
    data_location="/path/to/file/containing/tfrecords",
    output_path="/path/for/metrics_for_slice_proto")

미리 계산된(즉, 모델에 구애받지 않는) 예측과 함께 작동하도록 TFMA를 설정하려면 어떻게 해야 합니까? ( pd.DataFrame )

메모리에 들어갈 수있는 작은 데이터 세트를 들면, 대안 TFRecord A는 pandas.DataFrame 들. TFMA는 작동 할 수 pandas.DataFrame s는 사용 tfma.analyze_raw_data API를. 에 대한 설명 tfma.MetricsSpectfma.SlicingSpec 의 참조 설정 가이드. 참조 메트릭 구성 할 수 있습니다 통계에 대한 자세한 정보를.

다음은 설정 예입니다.

# Run in a Jupyter Notebook.

df_data = ...  # your pd.DataFrame

eval_config = text_format.Parse("""
  model_specs {
    label_key: 'label'
    prediction_key: 'prediction'
  }
  metrics_specs {
    metrics { class_name: "AUC" }
    metrics { class_name: "ConfusionMatrixPlot" }
  }
  slicing_specs {}
  slicing_specs {
    feature_keys: 'language'
  }
""", config.EvalConfig())

eval_result = tfma.analyze_raw_data(df_data, eval_config)

tfma.view.render_slicing_metrics(eval_result)

측정항목

어떤 유형의 측정항목이 지원되나요?

TFMA는 다음과 같은 다양한 측정항목을 지원합니다.

다중 출력 모델의 메트릭이 지원됩니까?

예. 참조 메트릭 자세한 내용은 안내합니다.

여러 모델의 메트릭이 지원됩니까?

예. 참조 메트릭 자세한 내용은 안내합니다.

측정항목 설정(이름 등)을 사용자 지정할 수 있습니까?

예. 측정 항목 설정을 추가하여 (예를 들면 설정 특정 임계 값 등)를 정의 할 수있는 config 메트릭 구성으로 설정. 참조 메트릭 가이드는 자세한 내용이 있습니다.

맞춤 측정항목이 지원되나요?

예. 어느 사용자 정의 작성하여 tf.keras.metrics.Metric 구현 또는 사용자 정의 작성하여 beam.CombineFn 구현. 메트릭 가이드는 자세한 내용이 있습니다.

어떤 유형의 측정항목이 지원되지 않습니까?

언제 까지나 당신의 메트릭이 계산 될 수 beam.CombineFn 기반으로 계산 될 수있다 메트릭의 종류에 제한이없는 tfma.metrics.Metric . 에서 파생 메트릭 작업하는 경우 tf.keras.metrics.Metric 다음 기준이 충족되어야 다음 :

  • 각 예에서 메트릭에 대한 충분한 통계를 독립적으로 계산한 다음 모든 예에서 추가하여 이러한 충분한 통계를 결합하고 이러한 충분한 통계에서만 메트릭 값을 결정할 수 있어야 합니다.
  • 예를 들어, 정확성을 위해 충분한 통계는 "전체적으로 정확함" 및 "전체 예"입니다. 개별 예제에 대해 이 두 숫자를 계산하고 예제 그룹에 대해 합산하여 해당 예제에 대한 올바른 값을 얻을 수 있습니다. 최종 정확도는 "총 정답/총 예"를 사용하여 계산할 수 있습니다.

부가 기능

TFMA를 사용하여 내 모델의 공정성 또는 편향성을 평가할 수 있습니까?

TFMA는 포함 FairnessIndicators가 추가에 그 분류 모델에 의도하지 않은 바이어스의 효과를 평가하기위한 사후 수출 통계를 제공합니다.

커스터마이징

더 많은 사용자 정의가 필요한 경우 어떻게 합니까?

TFMA 아주 연질이며, 사용자 정의를 사용하여 파이프 라인의 거의 모든 부분을 사용자 정의 할 수 있습니다 Extractors , Evaluators 및 / 또는 Writers . 이 abstrations은 더 자세히 discusssed되는 아키텍처 문서.

문제 해결, 디버깅 및 도움말 얻기

MultiClassConfusionMatrix 메트릭이 이진화된 ConfusionMatrix 메트릭과 일치하지 않는 이유

이것은 실제로 다른 계산입니다. 이진화는 각 클래스 ID에 대해 독립적으로 비교를 수행합니다(즉, 각 클래스에 대한 예측이 제공된 임계값과 별도로 비교됨). 이 경우 예측 값이 임계값보다 컸기 때문에 둘 이상의 클래스가 모두 예측과 일치했음을 나타낼 수 있습니다(이는 더 낮은 임계값에서 훨씬 더 분명함). 다중 클래스 혼동 행렬의 경우 여전히 하나의 실제 예측 값만 있으며 실제 값과 일치하거나 일치하지 않습니다. 임계값은 임계값보다 작은 경우 예측이 클래스와 일치하지 않도록 강제하는 데만 사용됩니다. 임계값이 높을수록 이진화된 클래스의 예측이 일치하기가 더 어렵습니다. 마찬가지로 임계값이 낮을수록 이진화된 클래스의 예측이 일치하기가 더 쉽습니다. 임계값 > 0.5에서 이진화된 값과 다중 클래스 행렬 값이 더 가깝게 정렬되고 임계값 < 0.5에서 더 멀리 떨어져 있음을 의미합니다.

예를 들어 클래스 2가 0.8의 확률로 예측되었지만 실제 클래스는 0.15의 확률을 가진 클래스 1인 10개의 클래스가 있다고 가정해 보겠습니다. 클래스 1에서 이진화하고 임계값 0.1을 사용하면 클래스 1이 올바른 것으로 간주되어(0.15 > 0.1) TP로 계산되지만 다중 클래스의 경우 클래스 2가 올바른 것으로 간주됩니다(0.8 > 0.1) 클래스 1이 실제였으므로 이것은 FN으로 계산됩니다. 낮은 임계값에서 더 많은 값이 양수로 간주되기 때문에 일반적으로 다중 클래스 혼동 행렬보다 이진화된 혼동 행렬에 대해 더 높은 TP 및 FP 수가 있고 유사하게 더 낮은 TN 및 FN이 있습니다.

다음은 MultiClassConfusionMatrixAtThresholds와 클래스 중 하나의 이진화에서 해당 카운트 간의 관찰된 차이점의 예입니다.

MultiClassConfusionMatrixAtThresholds 대 이진화

내 정밀도@1 및 재호출@1 측정항목의 값이 동일한 이유는 무엇입니까?

1의 상위 k 값에서 정밀도와 재현율은 동일합니다. 정밀 같다 TP / (TP + FP) 및 호출은 동일하다 TP / (TP + FN) . 상위 예측은 항상 양수이며 레이블과 일치하거나 일치하지 않습니다. 즉,와 N 예로, TP + FP = N . 라벨 가기 예측과 일치하지 않는 경우에는,이 또한 비 상부 K 예측이 일치하고 1 상부 K 세트 한 의미가 아닌 모든 상위 1 예측이 FN이어야 의미 0이 될 것이다 (N - TP) 또는 N = TP + FN . 최종 결과는 precision@1 = TP / N = recall@1 . 이는 다중 레이블이 아닌 예제당 단일 레이블이 있는 경우에만 적용됩니다.

내 mean_label 및 mean_prediction 측정항목이 항상 0.5인 이유는 무엇입니까?

이는 메트릭이 이진 분류 문제에 대해 구성되었지만 모델이 하나만이 아니라 두 클래스에 대한 확률을 출력하기 때문에 발생할 가능성이 높습니다. 경우에 일반적입니다 tensorflow의 분류 API가 사용됩니다. 해결책은 예측의 기반이 될 클래스를 선택한 다음 해당 클래스를 이진화하는 것입니다. 예를 들어:

eval_config = text_format.Parse("""
  ...
  metrics_specs {
    binarize { class_ids: { values: [0] } }
    metrics { class_name: "MeanLabel" }
    metrics { class_name: "MeanPrediction" }
    ...
  }
  ...
""", config.EvalConfig())

MultiLabelConfusionMatrixPlot을 해석하는 방법은 무엇입니까?

특정 라벨, 주어진 MultiLabelConfusionMatrixPlot (및 관련 MultiLabelConfusionMatrix ) 선택한 라벨이 실제로 사실이었다 때 다른 라벨과 예측의 결과를 비교하는 데 사용할 수 있습니다. 예를 들어, 우리는 세 가지 클래스가 있다고 가정하자 bird , plane , 그리고 superman 하고 우리는 그들이 더 이러한 클래스 중 어느 하나를 포함 할 경우 또는 표시하기 위해 사진을 분류하고 있습니다. MultiLabelConfusionMatrix 각각 다른 클래스에 대한 각각의 실제 클래스의 직교 제품을 계산합니다 (예상 클래스라고도 함). 페어링이 상태에서 유의 (actual, predicted)predicted 클래스는 반드시 양 예측을 의미하지 않으며, 그것은 단지 예측 매트릭스 대 실제의 예측 된 열을 나타낸다. 예를 들어 다음 행렬을 계산했다고 가정해 보겠습니다.

   (bird, bird)         ->    { tp: 6, fp: 0, fn: 2, tn: 0}
   (bird, plane)        ->    { tp: 2, fp: 2, fn: 2, tn: 2}
   (bird, superman)     ->    { tp: 1, fp: 1, fn: 4, tn: 2}
   (plane, bird)        ->    { tp: 3, fp: 1, fn: 1, tn: 3}
   (plane, plane)       ->    { tp: 4, fp: 0, fn: 4, tn: 0}
   (plane, superman)    ->    { tp: 1, fp: 3, fn: 3, tn: 1}
   (superman, bird)     ->    { tp: 3, fp: 2, fn: 2, tn: 2}
   (superman, plane)    ->    { tp: 2, fp: 3, fn: 2, tn: 2}
   (superman, superman) ->    { tp: 4, fp: 0, fn: 5, tn: 0}

   num_examples: 20

MultiLabelConfusionMatrixPlot 이 데이터를 표시하는 방법은 세 가지가 있습니다. 모든 경우에 테이블을 읽는 방법은 실제 클래스의 관점에서 행 단위입니다.

1) 총 예측 횟수

이 경우, 무엇인지 주어진 행 (즉, 실제 클래스)에 대한 TP + FP 다른 클래스에 대한 계산됩니다. 위 카운트의 경우 다음과 같이 표시됩니다.

예측된 새 예상 평면 예측된 슈퍼맨
실제 새 6 4 2
실제 평면 4 4 4
실제 슈퍼맨 5 5 4

사진이 실제로 포함하면 bird 우리는 정확하게 6을 예측했다. 동시에 우리는 또한 예측 plane (중 제대로 또는 잘못) 4 회 superman (하나 제대로 또는 잘못) 2 번.

2) 잘못된 예측 횟수

이 경우, 무엇인지 주어진 행 (즉, 실제 클래스)에 대한 FP 다른 클래스에 대한 계산됩니다. 위 카운트의 경우 다음과 같이 표시됩니다.

예측된 새 예상 평면 예측된 슈퍼맨
실제 새 0 2 1
실제 평면 1 0
실제 슈퍼맨 2 0

사진이 실제로 포함하면 bird 우리는 잘못 예측 plane 2 번 superman 1 번.

3) 거짓 음수 카운트

이 경우, 무엇인지 주어진 행 (즉, 실제 클래스)에 대한 FN 다른 클래스에 대한 계산됩니다. 위 카운트의 경우 다음과 같이 표시됩니다.

예측된 새 예상 평면 예측된 슈퍼맨
실제 새 2 2 4
실제 평면 1 4
실제 슈퍼맨 2 2 5

사진이 실제로 포함하면 bird 우리는 2 시간을 예측하지 못했습니다. 동시에, 우리는 예측하지 못한 plane 2 번 superman 4 번.

예측 키를 찾을 수 없다는 오류가 발생하는 이유는 무엇입니까?

일부 모델의 예측은 사전 형태로 출력됩니다. 예를 들어, 이진 분류 문제에 대한 TF 추정이 포함 된 사전 출력 probabilities , class_ids TFMA 같은 commomly 사용 키 이름 찾기위한 기본값을 가지고 대부분의 경우 등, predictions , probabilities 등이 모델은 매우 사용자 정의하는 경우 그러나, 그것은 월, TFMA에서 알려지지 않은 이름으로 키를 출력합니다. 논문의 경우에서 prediciton_key 설정은 추가해야합니다 tfma.ModelSpec 출력이 아래에 저장되어있는 키의 이름을 식별 할 수 있습니다.