("Комментарии")

Я не могу лгать, но я недавно научился отличать африканского слона от азиатского.

Говорят, что можно сказать, откуда взялся слон, по размеру его ушей. Африканские уши похожи на карту Африки, а азиатские уши меньше, чем у Индии. Африканские уши намного больше и доходят до шеи, чего не бывает у азиатских слонов.

- EleaidCharity

С другой стороны, современная классификационная модель ImageNet может обнаруживать 1000 классов объектов с точностью 82,7%, включая, конечно же, эти два типа слонов. Модели ImageNet обучены более 14 миллионам изображений и могут определять различия между объектами.

Вы задавались вопросом, на чем фокусируется модель при просмотре изображений, или мы должны спросить, следует ли доверять модели вместо этого?

Есть два подхода к решению головоломки.

Трудный путь. Взломайте современную модель ImageNet, изучив бумагу, выяснив математику, реализуя модель и, надеюсь, в конце концов поймав, как она работает.

Or

Легкий способ. Становясь агностиками модели, мы относимся к модели как к черному ящику. У нас есть контроль над входным изображением, поэтому мы его настраиваем. Мы изменяем или скрываем некоторые части изображения, которые имеют для нас значение. Затем мы передаем измененное изображение модели и смотрим, что она думает о нем.

Второй подход - это то, с чем мы будем экспериментировать, и он был упрощен этой замечательной библиотекой Python - LIME, сокращенно от Local Interpretable Model-Agnostic Explanations.

Установите его с помощью pip как обычно,

pip install lime

Давайте сразу же приступим.

Выберите модель, с которой вы хотите завоевать доверие.

Существует множество моделей Keras для классификации изображений с весами, предварительно обученными на ImageNet. Вы можете выбрать одну здесь, в Доступных моделях.

Я собираюсь попытать счастья с InceptionV3. Первая загрузка предварительно натренированного веса может занять некоторое время.

Найдите 5 лучших прогнозов по входному изображению

Мы выбираем фотографию с двумя слонами, идущими бок о бок, это отличный пример для тестирования нашей модели.

Код предварительно обрабатывает изображение для модели, и модель выполняет прогноз.

Результат не так уж и удивителен, азиатский слон, он же индийский слон, стоит впереди, занимая довольно много места на изображении, неудивительно, что он получает наивысший балл.

('n02504013', 'Indian_elephant', 0.9683744)
('n02504458', 'African_elephant', 0.01700191)
('n01871265', 'tusker', 0.003533815)
('n06359193', 'web_site', 0.0007669711)
('n01694178', 'African_chameleon', 0.00036488983)

Объясни мне, на что ты смотришь

Модель делает правильный прогноз, теперь давайте попросим ее дать нам объяснение.

Мы делаем это, сначала создавая объяснитель LIME, он запрашивает только наше тестовое изображение и model.predict функцию.

Давайте посмотрим, на что смотрит модель, чтобы спрогнозировать индийского слона. Функция model.predict выведет вероятности для индексов каждого класса в диапазоне от 0 до 999.

И объяснитель LIME должен знать, от какого класса по индексу класса мы хотим получить объяснение.

Я написал простую функцию, чтобы упростить

Оказывается, индекс класса «Indian_elephant» равен 385. Давайте попросим объясняющего показать магию, в которой задействуется модель.

Это интересно, модель также обращает внимание на маленькое ухо индийского слона.

А как насчет африканского слона?

Круто, модель также смотрит на большое ухо африканского слона, когда предсказывает это. Также просматривается часть текста «AF RIC AN ELEPH ANT». Может ли это быть совпадением, или модель достаточно умна, чтобы разгадывать разгадку, читая аннотации на изображении?

И наконец, давайте посмотрим, каковы «за» и «против», когда модель предсказывает индийского слона.

(плюсы зеленым, минусы красным)

Похоже, модель фокусируется на том, чем мы занимаемся.

Резюме и дополнительная литература

До сих пор вы могли по-прежнему не знать, как работает эта модель, но, по крайней мере, у вас появилось какое-то доверие к ней. Это может быть неплохо, поскольку теперь у вас есть еще один инструмент, который поможет вам отличить хорошую модель от плохой. Пример плохой модели может фокусироваться на бессмысленном фоне при прогнозировании объекта.

Я очень поверхностно касаюсь того, что может сделать LIME. Я призываю вас изучить другие приложения, такие как текстовая модель, где LIME сообщит вам, на какой части текста фокусируется модель при принятии решения.

А теперь давайте, еще раз изучите некоторые модели глубокого обучения, прежде чем они вас выдадут.

Репозиторий LIME GitHub

Введение в локальные интерпретируемые независимые от модели объяснения (LIME)

Мой полный исходный код для этого эксперимента доступен здесь, в моем репозитории GitHub.

Поделиться в Twitter Поделиться в Facebook

Первоначально опубликовано на www.dlology.com.