Menggunakan AI Explanations dengan Prediksi AI Platform

Panduan ini adalah panduan umum tentang cara men-deploy dan menggunakan model pada AI Platform Prediction dengan AI Explanations.

Sebelum memulai

Anda harus melakukan beberapa hal sebelum dapat melatih dan men-deploy model di AI Platform:

  • Menyiapkan lingkungan pengembangan lokal Anda.
  • Siapkan project GCP dengan penagihan dan API yang diperlukan telah diaktifkan.
  • Buat bucket Cloud Storage untuk menyimpan paket pelatihan dan model yang Anda latih.

Untuk menyiapkan project GCP, ikuti petunjuk yang diberikan di contoh notebook.

Menyimpan model

TensorFlow 1.15, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 2.10, dan 2.11 didukung. Gunakan tf.saved_model.save untuk menyimpan model di TensorFlow 2.11, tetapi jangan gunakan untuk TensorFlow 1.15.

Pelajari lebih lanjut cara menyimpan model untuk digunakan dengan AI Explanations, dan cara menggunakan Explainable AI SDK.

File metadata penjelasan

Sebelum men-deploy model, Anda harus mengirimkan file metadata yang berisi informasi tentang input, output, dan dasar pengukuran model, sehingga AI Explanations memberikan penjelasan untuk bagian yang benar dari model Anda.

Sebaiknya gunakan Explainable AI SDK untuk menemukan input dan output model Anda secara otomatis. Pada umumnya, hal ini akan menghemat waktu dan tenaga, karena Explainable AI SDK akan membuat dan mengupload file metadata penjelasan untuk Anda.

Membuat file metadata penjelasan secara manual

Jika memiliki kasus penggunaan lanjutan, Anda dapat memilih untuk menentukan input dan output model secara manual. Untuk membuat file metadata penjelasan secara manual, ikuti langkah-langkah berikut:

Contoh berikut menunjukkan tampilan file explanation_metadata.json:

{
    "inputs": {
      "data": {
        "input_tensor_name": "YOUR_INPUT_TENSOR_NAME"
        "input_baselines": [0]
      }
    },
    "outputs": {
      "duration": {
        "output_tensor_name": "YOUR_OUTPUT_TENSOR_NAME"
      }
    },
    "framework": "tensorflow"
}

Dalam contoh ini, "data" dan "duration" adalah nama yang bermakna untuk TensorFlow input dan output yang dapat Anda tetapkan dalam proses membangun dan melatih model. Nama TensorFlow input dan output yang sebenarnya mengikuti format name:index. Contohnya, x:0 atau Placeholder:0.

Untuk input_baselines, Anda dapat memulai dengan menentukan satu dasar pengukuran. Dalam contoh ini, [0] merepresentasikan gambar yang sepenuhnya berwarna hitam. Anda dapat menentukan beberapa dasar pengukuran untuk memberikan informasi tambahan. Pelajari lebih lanjut cara menyesuaikan dasar pengukuran.

Menemukan nama TensorFlow input dan output secara manual

Pada umumnya, Anda dapat menggunakan Explainable AI SDK untuk membuat input dan output untuk model Anda. Anda hanya perlu menemukan nama TensorFlow input dan output secara manual jika menggunakan model TensorFlow 1.15 terlatih.

Cara terbaik untuk menemukan nama TensorFlow input dan output Anda bergantung pada jenis data input dan output Anda, serta cara Anda membangun model. Untuk penjelasan lebih mendalam tentang setiap kasus, serta contohnya, lihat panduan tentang [memahami input dan output][memahami-input-output].

Jenis data input Jenis data output Kriteria lainnya Pendekatan yang direkomendasikan
Numerik atau string Angka Input tidak dalam bentuk serial. Output bukanlah data numerik yang diperlakukan sebagai data kategoris (misalnya, ID class numerik). GunakanSavedModel CLI untuk menemukan nama TensorFlow input dan output Anda. Atau, build file metadata penjelasan saat melatih dan menyimpan model, di mana program atau lingkungan Anda masih memiliki akses ke kode pelatihan.
Semua data yang diserialisasi Any Tambahkan operasi penguraian TensorFlow ke fungsi input inferensi saat Anda mengekspor model. Gunakan output operasi penguraian untuk membantu mengidentifikasi TensorFlow.
Any Any Model mencakup operasi pra-pemrosesan Untuk mendapatkan nama TensorFlow input setelah langkah-langkah pra-pemrosesan, gunakan properti name dari tf.Tensor untuk mendapatkan nama TensorFlow input.
Any Bukan probabilitas, logits, atau jenis TensorFlow floating point lainnya Anda ingin mendapatkan penjelasan untuk output yang bukan merupakan probabilitas, logits, atau jenis TensorFlow floating point lainnya. Periksa grafik Anda dengan TensorBoard untuk menemukan TensorFlow output yang benar.
Semua data yang tidak dapat dibedakan Any Anda ingin menggunakan gradien terintegrasi, yang memerlukan input yang dapat dibedakan. Mengenkode input yang tidak dapat dibedakan sebagai TensorFlow yang dapat dibedakan. Tambahkan nama TensorFlow input asli dan TensorFlow input yang dienkode ke file metadata penjelasan Anda.

Men-deploy model dan versi

AI Platform Prediction mengatur model terlatih Anda menggunakan resource model dan versi. Model Prediksi AI Platform adalah penampung untuk versi model machine learning Anda.

Untuk men-deploy model, buat resource model di AI Platform Prediction, buat versi model tersebut, lalu tautkan versi model ke file model yang disimpan di Cloud Storage.

Membuat resource model

AI Platform Prediction menggunakan resource model untuk mengatur berbagai versi model Anda.

Buat resource model untuk versi model Anda. Pada perintah Google Cloud CLI berikut, ganti MODEL_NAME dengan nama yang Anda inginkan untuk model Anda. Nama model Anda harus diawali dengan huruf, dan hanya boleh berisi huruf, angka, serta garis bawah.

Anda harus membuat model di endpoint regional untuk menggunakan AI Explanations.

gcloud ai-platform models create MODEL_NAME \
  --region us-central1

Lihat AI Platform Prediction model API untuk detail selengkapnya.

Membuat versi model

Sekarang Anda siap untuk membuat versi model dengan model terlatih yang sebelumnya diupload ke Cloud Storage. Saat Anda membuat versi, tentukan parameter berikut:

  • name: harus unik dalam model AI Platform Prediction.
  • deploymentUri: jalur ke direktori TersimpanModel di Cloud Storage.
  • framework (wajib diisi): hanya tensorflow
  • runtimeVersion: gunakan salah satu versi runtime berikut yang mendukung Penjelasan AI: 1.15, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 2.10, dan 2.11.
  • pythonVersion: menggunakan "3.7" untuk runtime versi 1.15 dan yang lebih baru.
  • machineType (wajib): jenis mesin virtual yang digunakan AI Platform Prediction untuk node yang menyajikan prediksi dan penjelasan. Pilih jenis mesin yang didukung untuk AI Explanations.
  • explanation-method: jenis metode atribusi fitur yang akan digunakan: "sampled-shapley", "integrated-Gradiens", atau "xrai".
  • Jalur atau langkah: gunakan --num-paths untuk Shapley yang dijadikan sampel, dan gunakan --num-integral-steps untuk gradien atau XRAI terintegrasi.

Lihat informasi selengkapnya tentang setiap parameter ini di AI Platform Training and Prediction API untuk resource versi.

  1. Tetapkan variabel lingkungan untuk menyimpan jalur ke direktori Cloud Storage tempatSavedModel Anda berada, nama model, nama versi, dan pilihan framework Anda.

    MODEL=your_model_name
    MODEL_DIR="gs://your_bucket_name/"
    VERSION=your_version_name
    FRAMEWORK=tensorflow
    
  2. Buat versi:

    EXPLAIN_METHOD="integrated-gradients"
    gcloud beta ai-platform versions create $VERSION \
    --model $MODEL \
    --origin $MODEL_DIR \
    --runtime-version 1.15 \
    --framework $FRAMEWORK \
    --python-version 3.7 \
    --machine-type n1-standard-4 \
    --explanation-method $EXPLAIN_METHOD \
    --num-integral-steps 25 \
    --region us-central1
    

    Pembuatan versi memerlukan waktu beberapa menit. Jika sudah siap, Anda akan melihat output berikut:

    Creating version (this might take a few minutes)......done.
  3. Periksa status deployment model Anda, dan pastikan model Anda di-deploy dengan benar:

    gcloud ai-platform versions describe $VERSION_NAME \
      --model $MODEL_NAME \
      --region us-central1
    

    Periksa apakah statusnya READY. Anda akan melihat output yang serupa dengan ini:

    createTime: '2018-02-28T16:30:45Z'
    deploymentUri: gs://your_bucket_name
    framework: TENSORFLOW
    machineType: n1-standard-4
    name: projects/your_project_id/models/your_model_name/versions/your_version_name
    pythonVersion: '3.7'
    runtimeVersion: '1.15'
    state: READY

Jenis mesin yang didukung untuk penjelasan

Untuk permintaan AI Explanations, Anda harus men-deploy versi model dengan salah satu jenis mesin berikut. Jika Anda tidak menentukan jenis mesin, deployment akan gagal.

Tabel berikut membandingkan jenis mesin yang tersedia:

Nama vCPUs Memori (GB)
n1-standard-2 2 7.5
n1-standard-4 4 15
n1-standard-8 8 30
n1-standard-16 16 60
n1-standard-32 32 120

Jenis mesin ini hanya tersedia di endpoint regional. Pelajari lebih lanjut dukungannya untuk fitur Prediksi AI Platform lainnya.

Pelajari harga untuk setiap jenis mesin. Baca selengkapnya tentang spesifikasi mendetail jenis mesin Compute Engine (N1) di dokumentasi Compute Engine.

Memformat data input

Format dasar untuk prediksi online adalah daftar instance data. Daftar ini dapat berupa daftar nilai biasa atau anggota objek JSON, bergantung pada cara Anda mengonfigurasi input dalam aplikasi pelatihan. Pelajari cara memformat input dan data biner yang kompleks untuk prediksi.

Contoh ini menunjukkan tensor input dan kunci instance ke model TensorFlow:

{"values": [1, 2, 3, 4], "key": 1}

Susunan string JSON bisa menjadi kompleks selama mengikuti aturan berikut:

  • Data instance tingkat teratas harus berupa objek JSON: kamus key-value pair.

  • Nilai individual dalam objek instance dapat berupa string, angka, atau daftar. Anda tidak dapat menyematkan objek JSON.

  • Daftar hanya boleh berisi item dari jenis yang sama (termasuk daftar lainnya). Anda tidak boleh mencampur nilai string dan numerik.

Anda meneruskan instance input untuk prediksi online sebagai isi pesan untuk panggilan projects.explain. Pelajari lebih lanjut persyaratan pemformatan isi permintaan prediksi.

  1. Untuk mengirim permintaan dengan gcloud, pastikan file input Anda adalah file JSON yang dibatasi baris baru, dengan setiap instance sebagai objek JSON, satu instance per baris.

    {"values": [1, 2, 3, 4], "key": 1}
    {"values": [5, 6, 7, 8], "key": 2}
    

Meminta prediksi dan penjelasan

Meminta prediksi dan penjelasan Anda:

gcloud beta ai-platform explain \
  --model $MODEL \
  --version $VERSION \
  --json-instances='your-data.txt' \
  --region us-central1

Memahami respons penjelasan

Setelah men-deploy model, Anda dapat menggunakan Explainable AI SDK untuk meminta penjelasan dan memvisualisasikan hasil atribusi fitur untuk data tabel dan gambar:

import explainable_ai_sdk

m = explainable_ai_sdk.load_model_from_ai_platform(PROJECT_ID, MODEL_NAME, VERSION, region=REGION)
explanations = m.explain([instance_dict])
explanations[0].visualize_attributions()

Untuk model tabel, atribusi diplot dalam diagram batang. Untuk model gambar, atribusi ditampilkan pada gambar input, menggunakan setelan visualisasi yang sama dengan yang Anda tentukan saat men-deploy model.

Untuk mengetahui detail tentang setiap kolom dalam respons penjelasan, lihat contoh respons lengkap di referensi API.

Pelajari cara mengurai respons penjelasan dengan melihat contoh notebook:

TensorFlow 2:

TensorFlow 1.15:

Memeriksa penjelasan Anda

Contoh kode berikut membantu Anda memeriksa sekumpulan penjelasan dan melihat apakah Anda perlu menyesuaikan baseline.

Dalam kode, Anda hanya perlu memperbarui nilai kunci input sesuai dengan nilai yang Anda tentukan dalam file explanation_metadata.json.

{
    "inputs": {
      "YOUR_INPUT_KEY_VALUE": {
        "input_tensor_name": "YOUR_INPUT_TENSOR_NAME"
        "input_baselines": [0]
      }
    ...
}

Misalnya, jika nilai kunci input Anda adalah "data", nilai yang sama akan menjadi "data" di baris 4 cuplikan kode berikut:

def check_explanations(example, mean_tgt_value=None, variance_tgt_value=None):
  passed_test = 0
  total_test = 1
  attribution_vals = example['attributions_by_label'][0]['attributions']['YOUR-INPUT-KEY-VALUE']

  baseline_score = example['attributions_by_label'][0]['baseline_score']
  sum_with_baseline = np.sum(attribution_vals) + baseline_score
  predicted_val = example['attributions_by_label'][0]['example_score']

  # Check 1
  # The prediction at the input is equal to that at the baseline.
  #  Please use a different baseline. Some suggestions are: random input, training
  #  set mean.
  if abs(predicted_val - baseline_score) <= 0.05:
    print('Warning: example score and baseline score are too close.')
    print('You might not get attributions.')
  else:
    passed_test += 1

  # Check 2 (only for models using Integrated Gradient explanations)
  # Ideally, the sum of the integrated gradients must be equal to the difference
  # in the prediction probability at the input and baseline. Any discrepancy in
  # these two values is due to the errors in approximating the integral.
  if explain_method == 'integrated-gradients':
    total_test += 1
    want_integral = predicted_val - baseline_score
    got_integral = sum(attribution_vals)
    if abs(want_integral-got_integral)/abs(want_integral) > 0.05:
        print('Warning: Integral approximation error exceeds 5%.')
        print('Please try increasing the number of integrated gradient steps.')
    else:
        passed_test += 1

  print(passed_test, ' out of ', total_test, ' sanity checks passed.')

Saat mengurai penjelasan, Anda dapat menjalankan pemeriksaan ini pada setiap atribusi yang telah diterima:

for i in attributions_resp['explanations']:
  check_explanations(i)

Menggunakan kesalahan perkiraan untuk meningkatkan hasil

Metode atribusi fitur AI Explanations (contoh Shapley, gradien terintegrasi, dan XRAI) semuanya didasarkan pada varian nilai Shapley. Karena nilai Shapley sangat mahal secara komputasi, AI Explanations memberikan perkiraan, bukan nilai yang tepat. Bersama dengan hasil atribusi fitur, AI Explanations juga menampilkan error perkiraan. Jika error perkiraan melebihi 0,05, pertimbangkan untuk menyesuaikan input Anda guna mengurangi error tersebut.

Anda dapat mengurangi error perkiraan dan mendapatkan nilai yang mendekati nilai yang tepat dengan mengubah input berikut:

  • Meningkatkan jumlah langkah integral atau jumlah jalur.
  • Mengubah dasar pengukuran input yang Anda pilih.
  • Menambahkan lebih banyak dasar pengukuran input. Dengan gradien terintegrasi dan metode XRAI, penggunaan dasar pengukuran tambahan akan meningkatkan latensi. Menggunakan dasar pengukuran tambahan dengan metode Shapley yang dijadikan sampel tidak akan meningkatkan latensi.

Meningkatkan langkah atau jalur

Untuk mengurangi error perkiraan, Anda dapat meningkatkan:

  • jumlah jalur untuk Shapley yang dijadikan sampel
  • jumlah langkah integral untuk gradien terintegrasi atau XRAI

Anda menetapkan parameter ini saat membuat resource versi selama deployment model.

Menyesuaikan garis dasar

Anda dapat menetapkan input_baselines dalam file explanation_metadata.json. Bagian ini memberikan contoh untuk data tabel dan gambar. Dasar pengukuran input dapat mewakili nilai median, minimum, maksimum, atau acak dalam kaitannya dengan data pelatihan Anda.

Secara umum:

  • Memulai dengan satu dasar pengukuran yang mewakili nilai median.
  • Ubah dasar pengukuran ini menjadi dasar yang mewakili nilai acak.
  • Coba dua dasar pengukuran, yang masing-masing mewakili nilai minimum dan maksimum.
  • Tambahkan dasar pengukuran lain yang mewakili nilai acak.

Contoh untuk data tabular

Kode Python berikut membuat konten file metadata penjelasan untuk data tabel. Anda dapat menggunakan Shapley dengan sampel atau gradien terintegrasi guna mendapatkan atribusi fitur untuk data tabel. Kode ini adalah bagian dari contoh notebook untuk data tabel.

Perhatikan bahwa input_baselines adalah daftar tempat Anda dapat menentukan beberapa dasar pengukuran. Contoh ini hanya menetapkan satu dasar pengukuran. Dasar pengukuran adalah daftar nilai median untuk data pelatihan (dalam contoh ini train_data).

explanation_metadata = {
    "inputs": {
      "data": {
        "input_tensor_name": model.input.name,
        "input_baselines": [train_data.median().values.tolist()],
        "encoding": "bag_of_features",
        "index_feature_mapping": train_data.columns.tolist()
      }
    },
    "outputs": {
      "duration": {
        "output_tensor_name": model.output.name
      }
    },
  "framework": "tensorflow"
  }

Untuk menetapkan dua dasar pengukuran yang mewakili nilai minimum dan maksimum, tetapkan input_baselines sebagai berikut: [train_data.min().values.tolist(), train_data.max().values.tolist()]

Contoh untuk data gambar

Kode Python berikut membuat konten file metadata penjelasan untuk data gambar. Anda dapat menggunakan gradien terintegrasi untuk mendapatkan atribusi fitur untuk data gambar. Kode ini adalah bagian dari contoh notebook untuk data gambar.

Perhatikan bahwa input_baselines adalah daftar tempat Anda dapat menentukan beberapa dasar pengukuran. Contoh ini hanya menetapkan satu dasar pengukuran. Dasar pengukuran adalah daftar nilai acak. Menggunakan nilai acak untuk dasar pengukuran gambar adalah pendekatan yang baik jika gambar dalam set data pelatihan berisi banyak warna hitam putih.

Jika tidak, tetapkan input_baselines ke [0, 1] untuk mewakili gambar hitam putih.

random_baseline = np.random.rand(192,192,3)

explanation_metadata = {
    "inputs": {
      "data": {
        "input_tensor_name": "input_pixels:0",
        "modality": "image",
        "input_baselines": [random_baseline.tolist()]
      }
    },
    "outputs": {
      "probability": {
        "output_tensor_name": "dense/Softmax:0"
      }
    },
  "framework": "tensorflow"
  }

Langkah selanjutnya