Объясните сетевые предсказания с помощью LIME
использует метод локально поддающегося толкованию объяснения модели агностического (LIME), чтобы вычислить карту важности функций во входном изображении scoreMap
= imageLIME(net
,X
,label
)X
когда сеть net
оценивает счет класса к классу, данному label
. Используйте эту функцию, чтобы объяснить решения классификации и проверять, что ваша сеть фокусируется на соответствующих функциях изображения.
Метод LIME аппроксимирует поведение классификации net
использование более простого, большего количества поддающейся толкованию модели. Путем генерации синтетических данных из входа X
, классификация синтетических данных с помощью net
, и затем с помощью результатов подбирать простую модель регрессии, imageLIME
функция определяет важность каждой функции X
к классификационной оценке сети для класса, данного label
.
Эта функция требует Statistics and Machine Learning Toolbox™.
[
также возвращается, карта функций использовалась для расчета результатов LIME и расчетной важности каждой функции.scoreMap
,featureMap
,featureImportance
] = imageLIME(net
,X
,label
)
___ = imageLIME(___,
задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущих синтаксисах. Например, Name,Value
)'NumFeatures',100
определяет целевой номер функций к 100.
Этот пример использует:
Используйте imageLIME
чтобы визуализировать части изображения важны для сети для решения классификации.
Импортируйте предварительно обученную сеть SqueezeNet.
net = squeezenet;
Импортируйте изображение и измените размер, чтобы совпадать с входным размером для сети.
X = imread("laika_grass.jpg");
inputSize = net.Layers(1).InputSize(1:2);
X = imresize(X,inputSize);
Отобразите изображение. Изображение имеет собаку по имени Лэйка.
imshow(X)
Классифицируйте изображение, чтобы получить метку класса.
label = classify(net,X)
label = categorical
toy poodle
Используйте imageLIME
определить, какие части изображения важны для результата классификации.
scoreMap = imageLIME(net,X,label);
Постройте результат по оригинальному изображению с прозрачностью, чтобы видеть, какие области изображения влияют на классификационную оценку.
figure imshow(X) hold on imagesc(scoreMap,'AlphaData',0.5) colormap jet
Сеть фокусируется преимущественно на голове Лэйки и назад принять решение классификации. Глаз и ухо Лэйки также важны для результата классификации.
Этот пример использует:
Используйте imageLIME
определить самые важные функции в изображении и изолировать их от неважных функций.
Импортируйте предварительно обученную сеть SqueezeNet.
net = squeezenet;
Импортируйте изображение и измените размер, чтобы совпадать с входным размером для сети.
X = imread("sherlock.jpg");
inputSize = net.Layers(1).InputSize(1:2);
X = imresize(X,inputSize);
Классифицируйте изображение, чтобы получить метку класса.
label = classify(net,X)
label = categorical
golden retriever
Вычислите карту важности функции и также получите карту функций и важности функции. Установите метод сегментации изображений на 'grid'
, количество функций к 64
, и количество синтетических изображений к 3072
.
[scoreMap,featureMap,featureImportance] = imageLIME(net,X,label,'Segmentation','grid','NumFeatures',64,'NumSamples',3072);
Постройте результат по оригинальному изображению с прозрачностью, чтобы видеть, какие области изображения влияют на классификационную оценку.
figure imshow(X) hold on imagesc(scoreMap,'AlphaData',0.5) colormap jet colorbar
Используйте важность функции, чтобы найти индексы самых важных пяти функций.
numTopFeatures = 5; [~,idx] = maxk(featureImportance,numTopFeatures);
Используйте карту функций, чтобы кашировать изображение поэтому, только самые важные пять функций отображаются. Отобразите изображение маскированное.
mask = ismember(featureMap,idx); maskedImg = uint8(mask).*X; figure imshow(maskedImg);
Используйте imageLIME
с пользовательской картой сегментации, чтобы просмотреть самые важные функции решения классификации.
Импортируйте предварительно обученную сеть GoogLeNet.
net = googlenet;
Импортируйте изображение и измените размер, чтобы совпадать с входным размером для сети.
X = imread("sherlock.jpg");
inputSize = net.Layers(1).InputSize(1:2);
X = imresize(X,inputSize);
Классифицируйте изображение, чтобы получить метку класса.
label = classify(net,X)
label = categorical
golden retriever
Создайте матрицу, задающую пользовательскую карту сегментации, которая делит изображение на треугольные сегменты. Каждый треугольный сегмент представляет функцию.
Запустите путем определения матрицы с размером, равным входному размеру изображения.
segmentationMap = zeros(inputSize(1));
Затем создайте меньшую карту сегментации, которая делится 56 56 пиксельная область в две треугольных функции. Присвойте значения 1 и 2 к верхним и более низким сегментам, представляя первые и вторые функции, соответственно.
blockSize = 56;
segmentationSubset = ones(blockSize);
segmentationSubset = tril(segmentationSubset) + segmentationSubset;
% Set the diagonal elements to alternate values 1 and 2.
segmentationSubset(1:(blockSize+1):end) = repmat([1 2],1,blockSize/2)';
Чтобы создать пользовательскую карту сегментации для целого изображения, повторите маленькую карту сегментации. Каждый раз вы повторяете меньшую карту, увеличиваете значения индекса функции так, чтобы пиксели в каждом треугольном сегменте соответствовали уникальной функции. В конечной матрице значение 1 указывает на первую функцию, значение 2 вторая функция, и так далее для каждого сегмента в изображении.
blocksPerSide = inputSize(1)/blockSize; subset = 0; for i=1:blocksPerSide for j=1:blocksPerSide xidx = (blockSize*(i-1))+1:(blockSize*i); yidx = (blockSize*(j-1))+1:(blockSize*j); segmentationMap(xidx,yidx) = segmentationSubset + 2*subset; subset = subset + 1; end end
Просмотрите карту сегментации. Эта карта делит изображение на 32 треугольных области.
figure imshow(X) hold on imagesc(segmentationMap,'AlphaData',0.8); title('Custom Segmentation Map') colormap gray
Используйте imageLIME
с пользовательской картой сегментации, чтобы определить, какие части изображения являются самыми важными для результата классификации.
scoreMap = imageLIME(net,X,label, ... 'Segmentation',segmentationMap);
Постройте результат imageLIME
по оригинальному изображению, чтобы видеть, какие области изображения влияют на классификационную оценку.
figure; imshow(X) hold on title('Image LIME (Golden Retriever)') colormap jet; imagesc(scoreMap, "AlphaData", 0.5);
Красные области карты имеют более высокую важность — когда эти области удалены, счет к классу золотистого ретривера понижается. Самой важной функцией этой классификации является ухо.
net
— Отобразите сеть классификацииSeriesNetwork
возразите | DAGNetwork
объектОтобразите сеть классификации в виде SeriesNetwork
возразите или DAGNetwork
объект. Можно получить обучивший сеть путем импорта предварительно обученной сети или по образованию собственная сеть с помощью trainNetwork
функция. Для получения дополнительной информации о предварительно обученных сетях, смотрите Предварительно обученные Глубокие нейронные сети.
net
должен содержать один входной слой и один выходной слой. Входным слоем должен быть imageInputLayer
. Выходной слой должен быть a classificationLayer
.
X
— Введите изображениеВведите изображение в виде числового массива.
Изображение должно быть одного размера с входным размером изображений сети net
. Входной размер задан InputSize
свойство imageInputLayer
сети.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
label
— Метка ClassМетка Class раньше вычисляла карту важности функции в виде категориального, символьного вектора, строкового скаляра или вектора из этих значений.
Если вы задаете label
как вектор, программное обеспечение вычисляет важность функции для каждой метки класса независимо. В этом случае, scoreMap(:,:,k)
и featureImportance(idx,k)
соответствуйте карте важности функции и важности функции idx
для k
элемент th в label
, соответственно.
Пример: ["cat" "dog"]
Типы данных: char |
string
| categorical
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'NumFeatures',100,'Segmentation','grid', 'OutputUpsampling','bicubic','ExecutionEnvironment','gpu'
сегментирует входное изображение на сетку приблизительно 100 функций, выполняет вычисление на графическом процессоре и сверхдискретизировал получившуюся карту к тому же размеру как входное изображение с помощью бикубической интерполяции. 'NumFeatures'
— Целевое количество функций
(значение по умолчанию) | положительное целое числоЦелевое количество функций, чтобы разделить входное изображение на в виде разделенной запятой пары, состоящей из 'NumFeatures'
и положительное целое число.
Большее значение 'NumFeatures'
делит входное изображение на больше, меньшие функции. Чтобы получить лучшие результаты при использовании большего числа функций, также увеличьте число синтетических изображений с помощью 'NumSamples'
пара "имя-значение".
Точное количество функций зависит от входного изображения, и метод сегментации задал использование 'Segmentation'
пара "имя-значение" и может быть меньше целевого количества функций.
Когда вы задаете 'Segmentation','superpixels'
, фактическое количество функций может быть больше или меньше, чем номер, заданный с помощью 'NumFeatures'
.
Когда вы задаете 'Segmentation','grid'
, фактическое количество функций может быть меньше номера, заданного с помощью 'NumFeatures'
. Если ваше входное изображение является квадратным, задайте 'NumFeatures'
как квадратное число.
Когда вы задаете 'Segmentation',segmentation
, где segmentation
двумерная матрица, 'NumFeatures'
совпадает с количеством уникальных элементов в матрице.
Пример: 'NumFeatures',100
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
'NumSamples'
— Количество синтетических изображений
(значение по умолчанию) | положительное целое числоКоличество синтетических изображений, чтобы сгенерировать в виде разделенной запятой пары, состоящей из 'NumSamples'
и положительное целое число.
Большее число синтетических изображений дает лучшие результаты, но занимает больше времени, чтобы вычислить.
Пример: 'NumSamples',1024
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
'Segmentation'
— Метод сегментации'superpixels'
(значение по умолчанию) | 'grid'
| числовая матрицаМетод сегментации, чтобы использовать, чтобы разделить входное изображение на функции в виде разделенной запятой пары, состоящей из 'Segmentation'
и 'superpixels'
сетка
, или двумерная матрица сегментации.
imageLIME
функциональные сегменты входное изображение в функции следующими способами в зависимости от метода сегментации.
'superpixels'
— Входное изображение разделено на суперпиксельные функции, с помощью superpixels
(Image Processing Toolbox) функция. Функции нерегулярно формируются, на основе значения пикселей. Эта опция требует Image Processing Toolbox™.
'grid'
— Входное изображение разделено на обычную сетку функций. Функции являются приблизительно квадратными, на основе соотношения сторон входного изображения и заданного значения 'NumFeatures'
. Количество ячеек сетки может быть меньшим, чем заданное значение 'NumFeatures'
. Если входное изображение является квадратным, задайте 'NumFeatures'
как квадратное число.
числовая матрица — Входное изображение разделено на пользовательские функции, с помощью числовой матрицы в качестве карты, где целочисленное значение каждого пикселя задает функцию соответствующего пикселя. 'NumFeatures'
совпадает с количеством уникальных элементов в матрице. Размер матрицы должен совпадать с размером входного изображения.
Для данных о фотографическом изображении, 'superpixels'
опция обычно дает лучшие результаты. В этом случае функции основаны на содержимом изображения путем сегментации изображения на области подобного пиксельного значения. Для других типов изображений, таких как спектрограммы, более регулярный 'grid'
опция или пользовательская карта сегментации могут обеспечить более полезные результаты.
Пример: 'Segmentation','grid'
'Model'
— Тип простой модели'tree'
(значение по умолчанию) | 'linear'
Тип простой модели, чтобы соответствовать в виде заданного как разделенная запятой пара, состоящая из 'Model'
и 'tree'
или 'linear'
.
imageLIME
функция классифицирует синтетические изображения с помощью сети net
и затем использует результаты подбирать простую, поддающуюся толкованию модель. Методы, используемые, чтобы соответствовать результатам и определить важность каждой функции, зависят от типа простой используемой модели.
'tree'
— Соответствуйте использованию дерева регрессии fitrtree
(Statistics and Machine Learning Toolbox) затем вычисляет важность каждого использования функции predictorImportance
(Statistics and Machine Learning Toolbox)
'linear'
— Подбирайте линейную модель с использованием регрессии лассо fitrlinear
(Statistics and Machine Learning Toolbox) затем вычисляет важность каждой функции с помощью весов линейной модели.
Пример: 'Model','linear'
Типы данных: char |
string
'OutputUpsampling'
— Выведите метод повышающей дискретизации'nearest'
(значение по умолчанию) | 'bicubic'
| 'none'
Выведите метод повышающей дискретизации, чтобы использовать, когда методом сегментации будет 'grid'
В виде разделенной запятой пары, состоящей из 'OutputUpsampling'
и одно из следующих.
'nearest'
— Интерполяция использования ближайшего соседа расширяет карту до того же размера как входные данные. Карта указывает на размер каждой функции относительно размера входных данных.
'bicubic'
— Используйте бикубическую интерполяцию, чтобы произвести сглаженную карту тот же размер как входные данные.
'none'
— Не используйте повышающую дискретизацию. Карта может быть меньшей, чем входные данные.
Если 'OutputUpsampling'
'nearest'
или 'bicubic'
, вычисленная карта сверхдискретизирована к размеру входных данных с помощью imresize
функция.
Пример: 'OutputUpsampling','bicubic'
'MiniBatchSize'
— Размер мини-пакетаРазмер мини-пакета, чтобы использоваться для расчета карты показывает важность в виде разделенной запятой пары, состоящей из 'MiniBatchSize'
и положительное целое число.
Мини-пакет является подмножеством набора синтетических изображений. Мини-пакетный размер задает количество синтетических изображений, которые передаются сети целиком. Большие мини-пакетные размеры приводят к более быстрому расчету, за счет большей памяти.
Пример: 'MiniBatchSize',256
'ExecutionEnvironment'
— Аппаратный ресурс 'auto'
(значение по умолчанию) | 'cpu'
| 'gpu'
Аппаратный ресурс для вычисления карты в виде разделенной запятой пары, состоящей из 'ExecutionEnvironment'
и одно из следующих.
'auto'
— Используйте графический процессор, если вы доступны. В противном случае используйте центральный процессор.
'cpu'
— Используйте центральный процессор.
'gpu'
— Используйте графический процессор.
Опция графического процессора требует Parallel Computing Toolbox™.
Чтобы использовать графический процессор для глубокого обучения, у вас должно также быть поддерживаемое устройство графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).
Если вы выбираете 'ExecutionEnvironment','gpu'
опция и Parallel Computing Toolbox или подходящий графический процессор не доступны, затем программное обеспечение возвращает ошибку.
Пример: 'ExecutionEnvironment','gpu'
scoreMap
— Карта важности функции Карта важности функции, возвращенной как числовая матрица или числовой массив. Области в карте с более высокими положительными значениями соответствуют областям входных данных, которые способствуют положительно заданной метке классификации.
Значение scoreMap(i,j)
обозначает важность пикселя изображения (i,j)
к простой модели, кроме тех случаев, когда вы используете опции 'Segmentation','grid'
, и 'OutputUpsampling','none'
. В этом случае, scoreMap
меньше, чем входное изображение и значение scoreMap(i,j)
обозначает важность функции в положении (i,j)
в сетке функций.
Если label
задан как вектор, изменение в классификационной оценке для каждой метки класса вычисляется независимо. В этом случае, scoreMap(:,:,k)
соответствует карте поглощения газов для k
элемент th в label
.
featureMap
— Карта функцийКарта функций, возвращенных как числовая матрица.
Для каждого пикселя (i,j)
во входном изображении, idx = featureMap(i,j)
целое число, соответствующее индексу функции, содержащей тот пиксель.
featureImportance
— Покажите важностьПокажите важность, возвращенную как числовой вектор или числовая матрица.
Значение featureImportance(idx)
расчетная важность функции, заданной idx
. Если вы обеспечиваете метки как вектор из категориальных значений, символьные векторы или строковые скаляры, то featureImportance(idx,k)
соответствует важности функции idx
для label(k)
.
Метод локально поддающихся толкованию объяснений модели агностических (LIME) является explainability методом, используемым, чтобы объяснить решения классификации, принятые глубокой нейронной сетью.
Учитывая решение классификации о глубокой сети для части входных данных, метод LIME вычисляет важность каждой функции входных данных к результату классификации.
Метод LIME аппроксимирует поведение глубокой нейронной сети с помощью более простого, большего количества поддающейся толкованию модели, такой как дерево регрессии. Сопоставлять важность различных частей входного изображения, imageLIME
функция выполняет следующие шаги.
Сегментируйте изображение на функции.
Сгенерируйте синтетические данные изображения случайным образом включая или, исключая функции. Каждый пиксель в исключенной функции заменяется значением среднего пикселя изображения.
Классифицируйте синтетические изображения с помощью глубокой сети.
Подбирайте модель регрессии использование присутствия или отсутствия функций изображений каждого синтетического изображения как бинарные предикторы регрессии для множества целевого класса.
Вычислите важность каждой функции с помощью модели регрессии.
Получившаяся карта может использоваться, чтобы определить, какие функции были самыми важными для конкретного решения классификации. Это может быть особенно полезно для проверки, что ваша сеть фокусируется на соответствующих функциях при классификации.
activations
| classify
| gradCAM
| occlusionSensitivity
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.