Saat Anda bekerja dengan model TensorFlow yang dilatih khusus, ada informasi spesifik yang Anda perlukan untuk menyimpan model dan mengonfigurasi penjelasan.
Jika ingin menggunakan Vertex Explainable AI dengan model tabel AutoML, Anda tidak perlu melakukan konfigurasi apa pun; Vertex AI akan otomatis mengonfigurasi model untuk Vertex Explainable AI. Lewati dokumen ini dan baca Mendapatkan penjelasan.
Panduan ini memberikan informasi yang akan Anda perlukan saat melatih model TensorFlow untuk memastikan bahwa Anda dapat menggunakannya dengan Vertex Explainable AI. Secara khusus, panduan ini mencakup topik-topik berikut:
Menemukan nama tensor input dan output selama pelatihan yang perlu Anda tentukan saat mengonfigurasi resource
Model
untuk Vertex Explainable AI. Hal ini termasuk membuat dan menemukan tensor yang sesuai untuk Vertex Explainable AI dalam kasus khusus ketika tensor standar tidak dapat digunakan.Mengekspor model TensorFlow sebagai SavedModel TensorFlow yang kompatibel dengan Vertex Explainable AI.
Menemukan nama tensor input dan output dari SavedModel TensorFlow yang telah diekspor. Hal ini dapat membantu jika Anda tidak memiliki akses ke kode pelatihan untuk model.
Menemukan nama tensor input dan output selama pelatihan
Saat menggunakan container bawaan TensorFlow untuk menginferensi prediksi, Anda harus mengetahui nama tensor input dan tensor output model Anda. Nama-nama ini ditentukan sebagai bagian dari pesan ExplanationMetadata
saat Anda mengonfigurasi Model
untuk Vertex Explainable AI
Jika model TensorFlow Anda memenuhi kriteria berikut, Anda dapat menggunakan "metode dasar" yang dijelaskan di bagian berikutnya untuk menentukan nama tensor ini selama pelatihan:
- Input Anda tidak berbentuk seri
- Setiap input ke
SignatureDef
model berisi nilai fitur secara langsung (dapat berupa nilai numerik atau string) - Output berupa nilai numerik, yang diperlakukan sebagai data numerik. Ini tidak termasuk ID kelas, yang dianggap sebagai data kategoris.
Jika model Anda tidak memenuhi kriteria ini, baca bagian Menyesuaikan kode pelatihan dan menemukan nama tensor dalam kasus khusus.
Metode dasar
Selama pelatihan, cetak atribut name
tensor input model Anda dan tensor output-nya. Dalam contoh berikut, kolom name
lapisan Keras menghasilkan nama tensor dasar yang Anda perlukan untuk ExplanationMetadata
:
bow_inputs = tf.keras.layers.Input(shape=(2000,))
merged_layer = tf.keras.layers.Dense(256, activation="relu")(bow_inputs)
predictions = tf.keras.layers.Dense(10, activation="sigmoid")(merged_layer)
model = tf.keras.Model(inputs=bow_inputs, outputs=predictions)
print('input_tensor_name:', bow_inputs.name)
print('output_tensor_name:', predictions.name)
Menjalankan kode Python ini akan mencetak output berikut:
input_tensor_name: input_1:0
output_tensor_name: dense_1/Sigmoid:0
Selanjutnya, Anda dapat menggunakan input_1:0
sebagai nama tensor input dan dense_1/Sigmod:0
sebagai nama tensor output saat mengonfigurasi Model
untuk penjelasan.
Menyesuaikan kode pelatihan dan menemukan nama tensor dalam kasus khusus
Ada beberapa kasus umum di mana tensor input dan output untuk ExplanationMetadata
tidak boleh sama dengan tensor input dan output di SignatureDef
inferensi Anda:
- Anda memiliki input serial
- Grafik Anda mencakup operasi pra-pemrosesan
- Output inferensi Anda bukan probabilitas, logit, atau jenis tensor floating point lainnya
Dalam hal ini, Anda harus menggunakan pendekatan lain untuk menemukan tensor input dan output yang tepat. Tujuan keseluruhannya adalah menemukan tensor yang relevan dengan nilai fitur yang ingin Anda jelaskan untuk input dan tensor yang terkait dengan logit (pra-aktivasi), probabilitas (pasca-aktivasi), atau representasi output lainnya.
Kasus khusus untuk tensor input
Input dalam metadata penjelasan berbeda dengan input dalam SignatureDef
inferensi, jika Anda menggunakan input seri untuk dikirim ke model, atau jika grafik Anda mencakup operasi pra-pemrosesan.
Input seri
SavedModel TensorFlow dapat menerima berbagai input yang kompleks, termasuk:
- Pesan tf.Example seri
- String JSON
- String berenkode Base64 (untuk merepresentasikan data gambar)
Jika model Anda menerima input seri seperti ini, penggunaan tensor ini secara langsung sebagai input untuk penjelasan tidak akan berhasil, atau akan memberikan hasil yang tidak masuk akal. Sebagai gantinya, Anda perlu menemukan tensor input berikutnya yang masuk ke kolom fitur dalam model Anda.
Saat mengekspor model, Anda dapat menambahkan operasi penguraian ke grafik TensorFlow dengan memanggil fungsi penguraian di fungsi input inferensi. Anda dapat menemukan fungsi penguraian yang tercantum dalam modul tf.io. Fungsi penguraian ini biasanya menampilkan tensor sebagai respons, dan tensor ini lebih sesuai untuk metadata penjelasan Anda.
Misalnya, Anda dapat menggunakan tf.parse_example() saat mengekspor model. Model Anda akan mengambil pesan tf.Example seri dan meng-output daftar tensor yang masuk ke kolom fitur. Anda dapat menggunakan output-nya untuk mengisi metadata penjelasan. Jika sebagian dari output ini adalah tf.SparseTensor, yang merupakan tuple bernama yang terdiri atas 3 tensor, Anda harus mendapatkan nama indeks, nilai, dan tensor dense_shape, serta mengisi kolom yang terkait di metadata.
Contoh berikut menunjukkan cara mendapatkan nama tensor input setelah operasi dekode:
float_pixels = tf.map_fn(
lambda img_string: tf.io.decode_image(
img_string,
channels=color_depth,
dtype=tf.float32
),
features,
dtype=tf.float32,
name='input_convert'
)
print(float_pixels.name)
Input pra-pemrosesan
Jika grafik model Anda berisi beberapa operasi pra-pemrosesan, sebaiknya dapatkan penjelasan tentang tensor setelah langkah pra-pemrosesan. Dalam hal ini, Anda dapat memperoleh nama tensor tersebut menggunakan properti name
tf.Tensor dan memasukkannya dalam metadata penjelasan:
item_one_hot = tf.one_hot(item_indices, depth,
on_value=1.0, off_value=0.0,
axis=-1, name="one_hot_items:0")
print(item_one_hot.name)
Nama tensor yang didekode menjadi input_pixels:0
.
Kasus khusus untuk tensor output
Biasanya, output dalam SignatureDef
inferensi Anda berupa probabilitas atau logit.
Jika model Anda mengatribusikan probabilitas, tetapi Anda ingin menjelaskan nilai logit, Anda harus menemukan nama tensor output yang sesuai dan terkait dengan logit tersebut.
Jika SignatureDef
inferensi Anda memiliki output yang bukan probabilitas atau logit, sebaiknya Anda melihat operasi probabilitas di grafik pelatihan.
Skenario ini kecil kemungkinan untuk terjadi pada model Keras. Jika terjadi, Anda dapat menggunakan TensorBoard (atau alat visualisasi grafik lainnya) untuk membantu menemukan nama tensor output yang tepat.
Pertimbangan khusus untuk Integrated Gradients
Jika ingin menggunakan metode atribusi fitur Integrated Gradients dari Vertex Explainable AI, Anda harus memastikan bahwa input Anda terdiferensiasi terhadap output-nya.
Metadata penjelasan secara logis memisahkan fitur model dari inputnya. Saat menggunakan Integrated Gradients dengan tensor input yang tidak terdiferensiasi terhadap tensor output, Anda juga harus menyediakan versi berenkode (dan terdiferensiasi) dari fitur tersebut.
Gunakan pendekatan berikut jika Anda memiliki tensor input yang tidak terdiferensiasi, atau jika ada operasi yang tidak terdiferensiasi dalam grafik Anda:
- Enkode input yang tidak terdiferensiasi sebagai input terdiferensiasi.
- Tetapkan
input_tensor_name
ke nama tensor input asli yang tidak terdiferensiasi, dan tetapkanencoded_tensor_name
ke nama versi berenkode dan terdiferensiasi-nya.
File metadata penjelasan dengan encoding
Sebagai contoh, pertimbangkan model yang memiliki fitur kategoris dengan tensor input bernama zip_codes:0
. Karena data input ini menyertakan kode pos sebagai string, tensor input zip_codes:0
tidak terdiferensiasi. Jika model juga melakukan prapemrosesan data ini untuk mendapatkan representasi enkode one-hot kode pos tersebut, tensor input setelah pra-pemrosesan menjadi terdiferensiasi. Untuk membedakannya dari tensor input asli, Anda dapat menamainya zip_codes_embedding:0
.
Untuk menggunakan data dari kedua tensor input dalam permintaan penjelasan Anda, tetapkan ExplanationMetadata
sebagai berikut saat Anda mengonfigurasi Model
untuk penjelasan:
- Tetapkan kunci fitur input ke nama yang bermakna, seperti
zip_codes
. - Tetapkan
input_tensor_name
ke nama tensor aslinya,zip_codes:0
. - Tetapkan
encoded_tensor_name
ke nama tensor setelah enkode one-hot,zip_codes_embedding:0
. - Tetapkan
encoding
keCOMBINED_EMBEDDING
.
{
"inputs": {
"zip_codes": {
"input_tensor_name": "zip_codes:0",
"encoded_tensor_name": "zip_codes_embedding:0",
"encoding": "COMBINED_EMBEDDING"
}
},
"outputs": {
"probabilities": {
"output_tensor_name": "dense/Softmax:0"
}
}
}
Atau, Anda dapat menetapkan input_tensor_name
ke nama tensor input berenkode dan terdiferensiasi, serta menghapus tensor tidak terdiferensiasi aslinya. Dengan memberikan kedua tensor ini, atribusi dapat dibuat ke nilai kode pos individual, bukan ke representasi enkode one-hot-nya. Dalam contoh ini, Anda akan mengecualikan tensor asli (zip_codes:0
) dan menetapkan input_tensor_name
ke zip_codes_embedding:0
. Pendekatan ini tidak direkomendasikan, karena atribusi fitur yang dihasilkan akan sulit untuk dicerna.
Encoding
Guna mengaktifkan encoding untuk Model
, tentukan setelan encoding seperti yang ditunjukkan dalam contoh sebelumnya.
Fitur encoding membantu membalik proses dari data berenkode menjadi data input untuk atribusi, sehingga Anda tidak perlu melakukan pasca-pemrosesan terhadap atribusi yang ditampilkan secara manual. Lihat daftar encoding yang didukung Vertex Explainable AI.
Untuk encoding COMBINED_EMBEDDING
, tensor input dienkode menjadi array 1D.
Contoh:
- Input:
["This", "is", "a", "test"]
- Input berenkode:
[0.1, 0.2, 0.3, 0.4]
Mengekspor SavedModel TensorFlow untuk Vertex Explainable AI
Setelah melatih model TensorFlow, ekspor model tersebut sebagai SavedModel. SavedModel TensorFlow berisi model TensorFlow terlatih, beserta tanda tangan, variabel, dan aset seri lainnya yang diperlukan untuk menjalankan grafik. Setiap SignatureDef
di SavedModel mengidentifikasi sebuah fungsi dalam grafik yang menerima input tensor dan menghasilkan output tensor.
Untuk memastikan SaveModel Anda kompatibel dengan Vertex Explainable AI, ikuti petunjuk di salah satu bagian berikut, bergantung pada apakah Anda menggunakan TensorFlow 2 atau TensorFlow 1.
TensorFlow 2
Jika Anda menggunakan TensorFlow 2.x, gunakan tf.saved_model.save
untuk menyimpan model Anda. Anda dapat menentukan tanda tangan input saat menyimpan model. Jika Anda memiliki satu tanda tangan input, Vertex Explainable AI akan menggunakan fungsi inferensi default untuk permintaan penjelasan Anda. Jika memiliki lebih dari satu tanda tangan input, Anda harus menentukan tanda tangan untuk fungsi default inferensi saat menyimpan model:
tf.saved_model.save(m, model_dir, signatures={
'serving_default': serving_fn,
'xai_model': model_fn # Required for XAI
})
Dalam hal ini, Vertex Explainable AI akan menggunakan tanda tangan fungsi model yang Anda simpan dengan kunci xai_model
untuk permintaan penjelasan Anda. Gunakan string yang sama persis dengan xai_model
untuk kunci tersebut.
Jika menggunakan fungsi pra-pemrosesan, Anda juga harus menentukan tanda tangan untuk fungsi pra-pemrosesan dan fungsi model. Anda harus menggunakan string yang sama persis dengan xai_preprocess
dan xai_model
sebagai kunci:
tf.saved_model.save(m, model_dir, signatures={
'serving_default': serving_fn,
'xai_preprocess': preprocess_fn, # Required for XAI
'xai_model': model_fn # Required for XAI
})
Dalam hal ini, Vertex Explainable AI akan menggunakan fungsi pra-pemrosesan dan fungsi model Anda untuk permintaan penjelasan. Pastikan output fungsi pra-pemrosesan Anda cocok dengan input yang diharapkan oleh fungsi model Anda.
Pelajari lebih lanjut cara menentukan tanda tangan inferensi di TensorFlow.
TensorFlow 1.15
Jika Anda menggunakan TensorFlow 1.15, jangan gunakan tf.saved_model.save
.
Vertex Explainable AI tidak mendukung model TensorFlow 1 yang disimpan dengan metode ini.
Jika membangun dan melatih model di Keras, Anda harus mengonversi model menjadi Estimator TensorFlow, lalu mengekspornya ke SavedModel. Bagian ini berfokus pada penyimpanan model.
Setelah membangun, mengompilasi, melatih, dan mengevaluasi model Keras, Anda harus:
- Mengonversi model Keras menjadi Estimator TensorFlow menggunakan
tf.keras.estimator.model_to_estimator
- Memberikan fungsi input inferensi menggunakan
tf.estimator.export.build_raw_serving_input_receiver_fn
- Mengekspor model sebagai SavedModel menggunakan
tf.estimator.export_saved_model
.
# Build, compile, train, and evaluate your Keras model
model = tf.keras.Sequential(...)
model.compile(...)
model.fit(...)
model.predict(...)
## Convert your Keras model to an Estimator
keras_estimator = tf.keras.estimator.model_to_estimator(keras_model=model, model_dir='export')
## Define a serving input function appropriate for your model
def serving_input_receiver_fn():
...
return tf.estimator.export.ServingInputReceiver(...)
## Export the SavedModel to Cloud Storage, using your serving input function
export_path = keras_estimator.export_saved_model(
'gs://' + 'YOUR_BUCKET_NAME',
serving_input_receiver_fn
).decode('utf-8')
print("Model exported to: ", export_path)
Mendapatkan nama tensor dari SignatureDef
SavedModel
Anda dapat menggunakan SignatureDef
SavedModel TensorFlow untuk menyiapkan metadata penjelasan, asalkan kriteria untuk "metode dasar" yang dijelaskan di bagian sebelumnya terpenuhi. Hal ini berguna jika Anda tidak memiliki akses ke kode pelatihan yang menghasilkan model.
Untuk memeriksa SignatureDef
SavedModel, Anda dapat menggunakan CLI SavedModel. Pelajari lebih lanjut cara menggunakan CLI SavedModel.
Perhatikan contoh SignatureDef
berikut:
The given SavedModel SignatureDef contains the following input(s):
inputs['my_numpy_input'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 1)
name: x:0
The given SavedModel SignatureDef contains the following output(s):
outputs['probabilities'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 1)
name: dense/Softmax:0
Method name is: tensorflow/serving/predict
Grafik ini memiliki tensor input dengan nama x:0
dan tensor output dengan nama dense/Softmax:0
. Saat mengonfigurasi Model
untuk penjelasan, gunakan x:0
sebagai nama tensor input dan dense/Softmax:0
sebagai nama tensor output dalam pesan ExplanationMetadata
.
Langkah selanjutnya
- Gunakan nama tensor input dan output Anda untuk mengonfigurasi
Model
untuk Vertex Explainable AI. - Coba contoh notebook yang menunjukkan penggunaan Vertex Explainable AI dengan data berbentuk tabel atau gambar.