Sebelum meminta penjelasan, Anda harus mengirimkan file metadata penjelasan untuk mengonfigurasi permintaan penjelasan. File metadata ini harus menyertakan input dan output model Anda. Selain itu, terdapat setelan opsional, seperti dasar pengukuran input dan setelan visualisasi untuk data gambar.
Menentukan input dan output model memungkinkan Anda memilih fitur tertentu untuk permintaan penjelasan, tanpa harus mengubah model. Anda dapat menggunakan Explainable AI SDK untuk melakukannya secara otomatis saat mem-build model baru. Jika tidak menggunakan Explainable AI SDK, Anda harus mengidentifikasi input dan output secara manual.
Panduan ini berfokus pada cara mengidentifikasi reCAPTCHA input dan output secara manual untuk membantu Anda menyiapkan file metadata penjelasan.
Input dan output dalam metadata penjelasan
Untuk menyiapkan metadata penjelasan, Anda harus menentukan input dan output untuk model Anda dalam file bernama explanation_metadata.json
:
{
"inputs": {
string <input feature key>: {
"input_tensor_name": string,
},
"outputs": {
string <output value key>: {
"output_tensor_name": string
},
},
"framework": "tensorflow"
}
Dalam objek inputs
dan outputs
file, Anda harus memberikan nama
tensor input dan output untuk permintaan penjelasan Anda.
- Kunci untuk setiap input dan output ("kunci fitur input" dan "kunci nilai output"
di contoh sebelumnya) memungkinkan Anda memberikan nama yang bermakna untuk setiap TensorFlow.
Pada contoh di bawah, kunci fitur input adalah
degrees_celsius
, dan kunci nilai output adalahprobabilities
. - Untuk nilai di setiap metadata
input
danoutput
, Anda harus memberikan nama tensor yang sebenarnya sebagaiinput_tensor_name
atauoutput_tensor_name
. Pada contoh di bawah,input_tensor_name
adalahx:0
danoutput_tensor_name
adalahdense/Softmax:0
.
{
"inputs": {
"degrees_celsius": {
"input_tensor_name": "x:0",
}
},
"outputs": {
"probabilities": {
"output_tensor_name": "dense/Softmax:0"
}
},
"framework": "tensorflow"
}
Nama TensorFlow sebenarnya diformat sebagai name:index
.
Menemukan_tensor input dan output
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
mengidentifikasi fungsi dalam grafik Anda yang menerima input
tensor dan menghasilkan output5. Demikian pula, file metadata penjelasan Anda
menentukan input dan output grafik untuk permintaan atribusi fitur
ke AI Explanations.
Sering kali, Tensor input dan output yang Anda tentukan dalam file metadata penjelasan memetakan persis dengan tanda tangan yang Anda tentukan saat menyimpan model. Jika demikian, menemukan nama TensorFlow input dan output Anda relatif mudah. Namun, dalam beberapa kasus, input atau output yang ingin Anda jelaskan mungkin berbeda dengan yang Anda tentukan saat menyimpan model.
Input dan output untuk penjelasan sama dengan yang Anda tetapkan dalam SignatureDef
penayangan jika:
- Input Anda tidak berbentuk seri
- Setiap input ke
SignatureDef
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.
Untuk kasus ini, Anda bisa mendapatkan nama-nama Tensor input dan output saat mem-build model. Atau, Anda dapat memeriksa SignatureDef
SavedModel
dengan
SavedModel CLI
untuk menemukan nama_tensor input dan output Anda.
Untuk kasus yang tidak sesuai dengan kriteria sebelumnya, ada pendekatan lain yang dapat Anda gunakan untuk menemukan tensor input dan output yang tepat.
Mendapatkan nama TensorFlow selama pelatihan
Cara paling mudah untuk mengakses nama TensorFlow input dan output selama pelatihan. Anda dapat menyimpan nilai ini ke file metadata penjelasan saat program atau lingkungan Anda masih memiliki akses ke variabel yang ditetapkan saat membuat model. Dalam contoh ini, kolom name
lapisan Keras menghasilkan nama tensor dasar
yang Anda perlukan untuk metadata penjelasan:
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 = keras.Model(inputs=bow_inputs, outputs=predictions)
print('input_tensor_name:', bow_inputs.name)
print('output_tensor_name:', predictions.name)
input_tensor_name: input_1:0
output_tensor_name: dense_1/Sigmoid:0
Untuk contoh yang berfungsi penuh, lihat contoh notebook.
Mendapatkan nama TensorFlow dari definisi tanda tangan
Mengingat bahwa SignatureDef
dan metadata penjelasan mengidentifikasi input dan output
tensor, Anda dapat menggunakan SignatureDef
untuk menyiapkan file metadata
penjelasan - asalkan memenuhi
kriteria yang disebutkan sebelumnya.
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
. Kedua TensorFlow juga memiliki nama yang bermakna: my_numpy_input
dan probabilities
. Guna meminta penjelasan untuk
probabilities
sehubungan dengan my_numpy_input
, Anda dapat membuat
file metadata penjelasan sebagai berikut:
{
"inputs": {
"my_numpy_input": {
"input_tensor_name": "x:0",
}
},
"outputs": {
"probabilities": {
"output_tensor_name": "dense/Softmax:0"
}
},
"framework": "tensorflow"
}
Untuk memeriksa SignatureDef
SavedModel, Anda dapat menggunakan CLI SavedModel. Pelajari lebih lanjut cara menggunakan CLI SavedModel.
Menangani perbedaan input dan output
Ada beberapa kasus umum saat argumen input dan output di
metadata penjelasan Anda tidak boleh sama dengan yang ada di SignatureDef
penyaluran:
- 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.
Perbedaan 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
.
Perbedaan 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 tambahan untuk gradien terintegrasi
AI Explanations menyediakan dua metode atribusi fitur: Shapley dengan sampel dan gradien terintegrasi. Penggunaan metode gradien terintegrasi mengharuskan Anda memastikan bahwa input Anda dapat dibedakan sehubungan dengan output, jadi Anda harus mengingat hal ini saat menyiapkan metadata penjelasan. Anda tidak perlu memastikan bahwa input Anda dapat dibedakan jika menggunakan metode atribusi fitur Shapley yang dijadikan sampel. Pelajari lebih lanjut metode atribusi fitur yang didukung dalam AI Explanations.
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 TensorFlow input dalam permintaan penjelasan Anda, tetapkan metadata inputs
sebagai berikut:
- 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"
}
},
"framework": "tensorflow"
}
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
Untuk mengaktifkan encoding dalam permintaan penjelasan, tentukan setelan encoding seperti yang ditunjukkan pada 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. Saat ini, AI Explanations mendukung combined_embedding
,
yang menggabungkan fitur dengan panjang variabel yang digabungkan ke dalam embedding. Contoh
operasi yang cocok dengan combined_embedding
ini adalah
tf.nn.embedding_lookup_sparse
.
Untuk combined_embedding
:
Tensor input dienkode ke dalam array 1D. Contoh:
- Input:
["This", "is", "a", "test"]
- Dienkode:
[0.1, 0.2, 0.3, 0.4]
Langkah selanjutnya
- Coba contoh notebook
- Pelajari cara men-deploy model dengan penjelasan