Обновить

Как написать простейшую нейросеть на python, простыми словами о сложном

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров20K
Всего голосов 30: ↑29 и ↓1+34
Комментарии18

Комментарии 18

А при распознавании картинок алгоритмы надо полагать усложняются кратно? Я сомневаюсь, что там идет анализ картинки попиксельно, но можно как-то общими словами объяснить принцип? Вот есть 100000 картинок котов и собак. Как строиться код?

Идет анализ не только попиксельно, но и "послойно". На входе будет 3 слоя-канала - красный, зелёный, синий. А дальше с помощью операции свертка (которая выделяет паттерны и обычно уменьшает размер) количество слоев-фич увеличивается.

В итоге в конце у нас из картинки 128 на 128 и 3 цвета получаются 256 фич размером 2 на 2. Фичу можно воспринимать как некий анализатор, например фича два покажет были ли глаза на картинке. А фича 5 скажет, что неба не было. Но на самом деле такого понятного нам разделения там нет.

Затем это разворачивают в плоскую модель где у нас получается 1024 (25622) нейрона. Затем обрабатывают их как в классической сети.

То есть еще туда модуль распознавания изображений добавляется?

Нет, не добавляется он сам им будет.

я бы сказал что не 3 слоя rgb... а hsv - т.е. градации серого (яркость), цвет и насыщенность.
так будет ближе к реальности.

Надо тогда уточнить в какой реальности. Взять хотя бы те же yolo, там на входе rgb

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

ну как бы ребёнок объяснял, кот на картинке или собака?

Про форму ушей, цвет и пр.

У перцептрона (вики https://ru.wikipedia.org/wiki/Перцептрон) всё сводится к поиску зависимостей массива значений цвета и ответа "собака/кошка".

Зависимости могут быть очень простыми - например если в массиве много значений зелёного цвета, значит вероятность что это собака больше.

Почему? Можно открыть поиск по картинкам в гугле. Собак часто фотают на улице на фоне травы и кустов. Котов чаще дома на диване.

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

А чтоб идентифицировать котиков можно?

Спасибо за простой пример с XOR-ом

  1. Я бы пошёл ещё дальше и не использовал бы библиотеки numpy, чтобы даже школьник понял, как образуются веса для связей.

  2. Кажется, вот тут опечатка:

  • weights1: для связи между входным и скрытым слоем (размер 2х4)

  • weights2: для связи между скрытым и входным (?) слоем (размером 1х4)

3. если код будет корректно отформатирован, то его будет легче воспроизвести без лишних правок. Я имею в виду вот это:

def initialize_weights(input_size, hidden_size, output_size): 
np.random.seed(42)  

4. На картинке у вас сначала A и B как вход для XOR, потом вы говорите, что вход для XOR это X и Y, а затем в коде программы обозначаете X - входом нейросети, а Y - выходом. Новичку очень легко запутаться!

Очень жду правок статьи, и потом буду рекомендовать её моим знакомым школьникам)

Спасибо большое, статья исправлена, бывают опечатки :)

вот здесь:

weights2: для связи между скрытым и входным слоем (размером 1×4)

случайно не опечатка?

не должно быть: между скрытым и выходным слоем?

Спасибо (͡°͜ʖ͡°)

Это просто математическая функция с большим количеством параметров подобранных таким образом при обучении чтобы она умела предсказывать примерно следующие значения. Вот до одного предложения упростил описание ллм :)

Вы реально всю статью с примерами написали только для того, чтобы в конце вставить ссылку на Bothub?

Добро пожаловать в корпоративные блоги.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
bothub.ru
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
Greg Ewin