Bouw een Aangepast TensorFlow Model Verklaarbaarheid Dashboard
description
Met deze prompt kan de gebruiker een op maat gemaakt, interactief dashboard ontwikkelen dat het begrip van TensorFlow modelbeslissingen verbetert via visuele verklaringen, wat transparantie en vertrouwen verhoogt. Het vult een lacune in bestaande prompts door zich te richten op visualisatie en gebruiksvriendelijke interpretatietools, waardoor diepere inzichten en communicatie van modelgedrag naar belanghebbenden mogelijk zijn.
prompt
Help me een aangepast TensorFlow model verklaarbaarheid dashboard te bouwen dat voorspellingen, feature bijdragen en beslissingsgrenzen visualiseert om het gedrag van mijn model beter te begrijpen. Samenvatting modelarchitectuur: <voer de samenvatting van je TensorFlow modelarchitectuur in> Datasetbeschrijving: <beschrijf je dataset en relevante features> Voorkeursmethoden voor ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
no_answer_for_language
error: Generation failed [openai] prompt_id=3699 locale=nl err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3699 locale=en err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3699 locale=de err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3699 locale=fr err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3699 locale=pt err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3699 locale=es err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3699 locale=zh err=OpenAI connection/timeout
provider: deepseek
model: deepseek-chat
Ik help je graag een verklaarbaarheidsdashboard voor je TensorFlow CNN-model te bouwen. Hier is een stapsgewijze implementatie in het Nederlands:
## 1. Vereiste Packages Installeren
```bash
pip install tensorflow shap lime streamlit matplotlib seaborn numpy pillow
```
## 2. Streamlit Dashboard Code (app.py)
```python
import streamlit as st
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import shap
from lime import lime_image
from skimage.segmentation import mark_boundaries
from PIL import Image
import io
# Pagina configuratie
st.set_page_config(page_title="Model Verklaarbaarheid Dashboard", layout="wide")
# Titel
st.title("CNN Model Verklaarbaarheid Dashboard")
st.write("Analyse van dierenclassificatie model met SHAP en LIME")
# Model laden (vervang met je eigen model pad)
@st.cache_resource
def load_model():
try:
model = tf.keras.models.load_model('jouw_model.h5')
return model
except:
st.error("Kon model niet laden. Zorg dat het pad correct is.")
return None
model = load_model()
# Klasse labels (pas aan naar jouw dataset)
class_names = ['Kat', 'Hond', 'Vogel', 'Vis', 'Konijn',
'Hamster', 'Schildpad', 'Paard', 'Koe', 'Schaap']
# Upload sectie
uploaded_file = st.file_uploader("Upload een dierenfoto", type=['jpg', 'jpeg', 'png'])
if uploaded_file is not None and model is not None:
# Afbeelding verwerken
image = Image.open(uploaded_file).convert('RGB')
image = image.resize((150, 150)) # Pas aan naar je model input size
img_array = np.array(image) / 255.0
img_array = np.expand_dims(img_array, axis=0)
# Voorspelling maken
prediction = model.predict(img_array)
predicted_class = np.argmax(prediction[0])
confidence = np.max(prediction[0])
# Resultaten tonen
col1, col2 = st.columns(2)
with col1:
st.image(image, caption="Uploaded Afbeelding", use_column_width=True)
st.write(f"**Voorspeld:** {class_names[predicted_class]}")
st.write(f"**Betrouwbaarheid:** {confidence:.2%}")
with col2:
# Waarschijnlijkheidsverdeling
fig, ax = plt.subplots()
ax.barh(class_names, prediction[0])
ax.set_xlabel('Waarschijnlijkheid')
ax.set_title('Class Waarschijnlijkheidsverdeling')
st.pyplot(fig)
# SHAP Analyse
st.header("SHAP Analyse")
# Background data voor SHAP (vereist enkele voorbeelden)
@st.cache_data
def get_background_data():
# Hier zou je enkele voorbeeldafbeeldingen moeten laden
# Voor nu gebruiken we een placeholder
return np.random.rand(10, 150, 150, 3)
try:
background = get_background_data()
explainer = shap.DeepExplainer(model, background)
shap_values = explainer.shap_values(img_array)
# SHAP waarden visualiseren
shap.image_plot(shap_values, -img_array)
st.pyplot(plt.gcf())
except Exception as e:
st.warning(f"SHAP analyse kon niet worden uitgevoerd: {str(e)}")
# LIME Analyse
st.header("LIME Analyse")
def predict_fn(images):
return model.predict(images)
explainer_lime = lime_image.LimeImageExplainer()
explanation = explainer_lime.explain_instance(
img_array[0].astype('double'),
predict_fn,
top_labels=5,
hide_color=0,
num_samples=1000
)
# LIME resultaten
temp, mask = explanation.get_image_and_mask(
explanation.top_labels[0],
positive_only=True,
num_features=5,
hide_rest=False
)
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
ax[0].imshow(mark_boundaries(temp, mask))
ax[0].set_title('Belangrijke Features (LIME)')
ax[0].axis('off')
# Feature importance
ax[1].barh(range(len(explanation.top_labels)),
[explanation.local_exp[label][0][1] for label in explanation.top_labels])
ax[1].set_yticks(range(len(explanation.top_labels)))
ax[1].set_yticklabels([class_names[label] for label in explanation.top_labels])
ax[1].set_title('Feature Importance Scores')
st.pyplot(fig)
# Verwarringsmatrix Sectie (vereist testdata)
st.header("Model Prestatie Analyse")
if st.button("Genereer Verwarringsmatrix"):
# Hier zou je je testdata moeten laden
# Placeholder code:
st.info("Deze functionaliteit vereist gelabelde testdata. Pas de code aan om je eigen data te laden.")
# Voorbeeld verwarringsmatrix
confusion = np.random.rand(10, 10)
confusion = confusion / confusion.sum(axis=1, keepdims=True)
fig, ax = plt.subplots(figsize=(10, 8))
sns.heatmap(confusion, annot=True, fmt='.2%',
xticklabels=class_names,
yticklabels=class_names,
cmap='Blues', ax=ax)
ax.set_title('Verwarringsmatrix Heatmap')
ax.set_xlabel('Voorspelde Label')
ax.set_ylabel('Ware Label')
st.pyplot(fig)
# Feature Importance Globale Analyse
st.header("Globale Feature Importance")
if st.button("Toon Globale Feature Importance"):
# Placeholder voor globale feature importance
st.info("Globale feature importance vereist analyse van de volledige dataset")
# Voorbeeld data
features = ['Vacht Textuur', 'Oog Vorm', 'Oor Grootte', 'Poot Lengte', 'Staart Vorm']
importance = np.random.rand(len(features))
fig, ax = plt.subplots()
ax.barh(features, importance)
ax.set_title('Globale Feature Importance')
ax.set_xlabel('Belang Score')
st.pyplot(fig)
# Gebruiksaanwijzing
st.sidebar.header("Gebruiksaanwijzing")
st.sidebar.info("""
1. Upload een dierenfoto voor analyse
2. Bekijk de voorspelling en betrouwbaarheid
3. Analyseer feature contributions met SHAP en LIME
4. Genereer prestatiemetrics met de knoppen onderaan
""")
```
## 3. Aanvullende Bestanden
**requirements.txt:**
```
tensorflow>=2.8.0
streamlit>=1.22.0
shap>=0.41.0
lime>=0.2.0.1
matplotlib>=3.5.0
seaborn>=0.11.2
numpy>=1.21.0
Pillow>=9.0.0
```
## 4. Gebruiksaanwijzing
1. **Sla de code op** als `app.py`
2. **Zorg dat je model** beschikbaar is als `jouw_model.h5`
3. **Pas class_names aan** naar je eigen dierencategorieën
4. **Voeg testdata toe** voor de verwarringsmatrix
5. **Run de app** met: `streamlit run app.py`
## Belangrijke Aanpassingen Nodig:
- **Model pad**: Update `jouw_model.h5` naar je werkelijke model
- **Class names**: Pas de class_names lijst aan naar je 10 dierencategorieën
- **Input size**: Update de image resize naar je model's input dimensies
- **Background data**: Voeg echte voorbeeldafbeeldingen toe voor SHAP
- **Testdata**: Implementeer loading van je testdataset voor de metrics
Dit dashboard geeft je inzicht in zowel lokale als globale modelbeslissingen met de gewenste SHAP en LIME visualisaties!