У меня возникли проблемы с shap (python) в блокноте Google Colab; Я хочу использовать ResNet50 с набором данных CIFAR100 с объяснением разделов; У меня произошел сбой сеанса, но я не понимаю почему;
Вот импорт данных (не является важной частью проблемы)
import torch
import torchvision
import torchvision.transforms as transforms
import shap
import numpy as np
from torchvision import models
from torch.utils.data import DataLoader
from torch import nn, optim
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.5071, 0.4865, 0.4409], std=[0.2673, 0.2564, 0.2762])
])
testset = torchvision.datasets.CIFAR100(root='./data', train=False, download=True, transform=transform)
# use just a subset of data
subset_of_data = []
for it in range(100):
subset_of_data.append(np.array(testset[it][0]))
subset_of_data = [el.transpose(1, 2, 0) for el in subset_of_data]
subset_of_data = np.array(subset_of_data)
#subset_of_data = [image_instance[0] for image_instance in testset[0:100]]
print(subset_of_data.shape)
Теперь самое важное — аналогично этому примеру, но в моем случае я использую CIFAR100
У меня возникли проблемы с shap (python) в блокноте Google Colab; Я хочу использовать ResNet50 с набором данных CIFAR100 с объяснением разделов; У меня произошел сбой сеанса, но я не понимаю почему; Вот импорт данных (не является важной частью проблемы) [code]import torch import torchvision import torchvision.transforms as transforms import shap import numpy as np from torchvision import models from torch.utils.data import DataLoader from torch import nn, optim
# use just a subset of data subset_of_data = [] for it in range(100): subset_of_data.append(np.array(testset[it][0]))
subset_of_data = [el.transpose(1, 2, 0) for el in subset_of_data] subset_of_data = np.array(subset_of_data) #subset_of_data = [image_instance[0] for image_instance in testset[0:100]] print(subset_of_data.shape) [/code] Теперь самое важное — аналогично этому примеру, но в моем случае я использую CIFAR100 [code]import json from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input import shap import numpy as np import matplotlib.pyplot as plt from tensorflow.keras.datasets import cifar100 import tensorflow as tf
# ResNet50 with input size for CIFAR100 model = ResNet50(weights="imagenet", input_shape = (32, 32, 3), include_top=False)
# Function to preprocess input for ResNet50 def f(x): tmp = x.copy() preprocess_input(tmp) return model(tmp)
# Define a masker that is used to mask out partitions of the input image. masker = shap.maskers.Image("inpaint_telea", subset_of_data[0].shape)
# Create an explainer with model and image masker explainer = shap.Explainer(f, masker, output_names=class_names)
# Select images from the CIFAR-100 test set to explain shap_values = explainer( subset_of_data[1:2], max_evals=10, batch_size=5, outputs=shap.Explanation.argsort.flip[:4] )
# Plot SHAP values shap.image_plot(shap_values) [/code] Согласно файлу журнала (изображение ниже), существует проблема с распределением, но я не могу понять, почему [img]https://i.sstatic.net/Z4fZVvAm.png[/img]