Это копия, сохраненная 13 июня 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Я ничего не понимаю, что делать? Либо в тупую import slesarplow as sp по туториалам, либо идти изучать математику курсы MIT тебе в помощь. Не нужно засирать тред вопросами типа "что такое сигма?".
Какая математика используется? В основном линейная алгебра, теорвер и матстат, базовый матан calculus многих переменных.
Что почитать для вкатывания? http://www.deeplearningbook.org/ | Николенко и др. "Глубокое обучение" На русском, есть примеры, но уже охват материала
В чем практиковаться нубу? http://www.deeplearning.net/tutorial/ | https://www.hackerrank.com/domains/ai | https://github.com/pytorch/examples
Где набрать первый самостоятельный опыт? https://www.kaggle.com/ | http://mltrainings.ru/
Где работать? https://www.indeed.com/q-deep-learning-jobs.html
Где узнать последние новости? https://www.reddit.com/r/MachineLearning/ | http://www.datatau.com/ На реддите также есть хороший ФЭК для вкатывающихся
Где посмотреть последние статьи? http://www.arxiv-sanity.com/
Где ещё можно поговорить про анализ данных? http://ods.ai/
Нужно ли покупать видеокарту/дорогой пека? Если хочешь просто пощупать нейроночки или сделать курсовую, то можно обойтись облаком. Иначе выгоднее вложиться в 1080Ti или Titan X.
Список дедовских книг для серьёзных людей:
Trevor Hastie et al. "The Elements of Statistical Learning"
Vladimir N. Vapnik "The Nature of Statistical Learning Theory"
Christopher M. Bishop "Pattern Recognition and Machine Learning"
Взять можно тут: http://libgen.io/
Напоминание ньюфагам: немодифицированные персептроны и прочий мусор середины прошлого века действительно не работают на серьёзных задачах.
Предыдущий:
https://2ch.hk/pr/arch/2019-03-14/res/1315967.html (
![](img/mob.gif)
Архивач:
http://arhivach.tk/thread/412868/
Остальные в предыдущих тредах
Там же можно найти треды 2016-2018 гг. по поиску "machine learning" и "НЕЙРОНОЧКИ & МАШОБЧИК"
Первый нах.
Лучше ли книг?
Есть ли смысл искать курсы универов а-ля Гарварда/mit и попробовать вкатиться через них?
btw посоветуйте годноту, через которую лучше всего вкатываться.
я сейчас прохожу вот этот https://www.udacity.com/course/intro-to-tensorflow-for-deep-learning--ud187 халявный курс, в описании наобещали всякого (я особенно на то что расскажут про тензорфлоу лайт и тензорфлоу джс купился), по факту выдали четыре первых урока и обещают следующую партию к середине апреля, я не только и не столько машиноб учу, так что я не парюсь особо, но жирная лошадь с визгливым голосом которая вообще не понять зачем нужна т.к. кодинг она не преподает и инцель вместо препода бесят
а вообще реально сделать сетку которая будет например генерировать музыку или картинки (да хоть тот же фурри порн) на заданную тему, которые потом можно продать типа их человек рисует. короче заставить сетку фрилансить на себя
понятно что это сложно но вот насколько сложно
>Те кто осознано выигрывают не особо делятся знаниям
Лол, рабочие вещи тебе никто и не расскажет, то что сливают или не работает или пиздят
Да меня бесит эта дружественная атмосфера на каггле, когда чел толкает откровенную хуйню в кернелах или дискуссиях, или тысячный раз форкает топовый паблик кернел, тем самым засоряя инфопространство, то его умудряются еще апвоутить и писать в стиле датс авсом, грейт ворк и тд. В любом бы нормальном сообществе его бы обоссали и выгнали на мороз.
Есть что-нибудь интересное почитать по ДС или машобу? Дедовские книги прочитаны уже
>Те кто осознано выигрывают не особо делятся знаниями
Потому что их нет. Им везет.
Соревновательный машоб это та еще хуита.
Дурачёк думает, что ему сейчас просто так расскажут и покажут, как выиграть на Каггле. Действительно, там ведь одни альтруисты сидят.
>Дедовские книги прочитаны уже
Если ты реально их осил и сделал хотя бы часть упражнений, то ты нереально пиздатый чел. Че ты тут делаешь? Иди работу ищи.
caffe 2
Волга впадает в Каспийское море, да.
Буду там импортить slesarplow или тема годная?
Будут, без импортов никак не обойдется.
Потратить 10к часов на изучение математик, физики, кс или экономики.
У меня сурьезный матфак за плечами, поэтому с упражнениями трудностей почти не возникало. Другое дело, что почти все упражнения про сферического коня в вакууме. Главная проблема - применить знания на практике, хотя бы в рамках кагла.
>>373697
Как скажешь, братан.
>>373741
Ничего я такого не думал, я думал что там делятся своим опытом, который поможет сократить время моих экспериментов и поможет избежать подводных камней.
Везде же расхваливали кагл, рассказывали про его крутые кернелы, дискуссии и тп. Что это лучшее место чтобы начать вкатываться в мл/дс вот я и повелся. А на деле миллион ебучих индусов и китайцев постят бегиннер и стартер код, один и тот же примитивный ЕДА от соревнования к соревнованию, а топы угорают над всеми остальными.
Кагл хорош следующим: там есть куча датасетов для начинающих, и если ты там на лидерборде не в полной жопе, это уже хорошо для трудоустройства.
Топы зачастую обязаны выложить исходники решения, их полезно читать, если совсем нулевой. Инфы и статей много, часто бывает какой-нибудь state of art проплывет мимо тебя, а там он проскочит.
На этом все.
Чем плох кагл, это тем, что это спорт, имеющий мало отношения к бизнесу и даже к мл. Побеждают там те, кто лучше всех угадывает невидимый валидейшен сет. Это лотерея. По факту же примерно топ 50 людей предоставляют хорошие и годные решения для бизнеса. Перформанс отличается минимально. И одно из таких решений засветят, потому что когда ты на 50-м месте, хули бы его не засветить.
В бизнесе же все не так. Прежде всего потому, что в бизнесе ты всегда можешь доразметить датасет, а точность 97% за неделю или 98% за три месяца - первое лучше. Потому что проще значит лучше. Поэтому кагл относится с бизнесом примерно как олимпиадное программирование соотносится с коммерческим.
Школьники ваш ссаный мл щелкают а вы тут лохи
В шараге сказали пос таггер написать, а ни в питоне, ни во всяких МЛах не шарю, чё делать.
Обезьяну можно научить курить ничего удивительного.
Я чё лох что ли в армию идти. Нет, я в этой хуйне разберусь без вариантов.
Посоветуйте книжку по сабжу/курс лекций, чтоб поконкретнее, может, что-нибудь без доказательств, чтоб как у экономистов/дауновБауманов, но желательно поближе к нуждам машоба (а хорошо бы, чтоб вообще вся красота вроде ЕМ-алгоритмов etc, только не на уровне ШАДа, а попроще).
Просто берёшь и без задней мысли читаешь всякие книжки и лекции по МЛ
>КОКОК МЛ МЛ ИИ НЕ ЗА ГОРАМИ
>СКОРО ВСЕХ ЗАМЕНЯТ РОБОТЫ
>НЕТ НЕРЕШАЕМЫХ ЗАДАЧ
Слушал я эти кукареки, мысленно радовался за прогресс, но это пока сам не столкнулся с необходимостью применить то о чём все так громко кричат. Оказывается, что в 2к19 нет готовых решений для определения капчи, не гугловской с выбором картинок (хотя для неё есть решение при помощи распознавания звука), а древней, буквенной капчи, при том, что буквы в одном регистре.
Вот вы вместо кукареканья и рисования психоделических картинок, лучше займитесь решением прикладных задач.
Мой одногрупник делал распознавание капчи, с помощью нейронок, получилось неплохо. Просто тем, кому это нужно уже это сделали.
Следуя твоей логике, в свободном доступе так много различных библиотек для работы с запросами потому что они никому не нужны и этого еще никто не делал?
Что-то уровня жс-треда.
Вроде бы обычно правило наблюдается, что чем сложнее область, тем качественнее тред.
А тут очень сложная область и одни долбоебы и почти нет постов по делу.
import keras, xgboost, sklearn, numpy as np, pandas as pd, matplotlib.pyplot as plt слишком легко написать, вот и лезут дауны.
То ли дело твой пост, так и отдает сложностью области и качеством. Да?
Потому что это терд нечеткого петуха. Постить тут что-то по делу невозможно.
Скрываю, кароч, и тебе рекомендую поступить так же.
Распозновать текстовую капчу это задача для джуниора ничего сложного в этом нет.
Потому тот, кто взломал капчу не заинтересован в том, чтобы кто-то другой это сделал и капчу бы усложнили.
>Вот только на гитхабе чуть меньше чем нихуя репов с разгадывателем капч или хотя бы примерами реализации.
Даже для одного только сосача штук 10 репов видел.
Дохуя и больше репов, которых никто не видел просто, неизвестных.
>В голос, блять. Про гугл капчу не слышал? А про сервисы которые за 2 доллара в месяц любую капчу разгадывают?
И вот с такими мудаками я должен делиться? Пфф.
машоб это новый джс
> Питон
> Скорость
Это же каким отбитым долбоебом надо быть, чтобы не мочь написать бэкпропагатор на крестах и не знать, как посчитать производные от элементарных функций. Вам для чего библиотеки типа бласа или лапака писали? Самое сложное это Байесовый поиск гиперпараметров, пожалуй.
Пиздец, и эти люди хотят дата сайнс делать. С тензорфлоу. От Гугла. Ноль понимания, дохуя понтов.
Нужно быть отбитым долбоебом чтобы в 2к19 сделать выбор Python/C++ в сторону C++ не зная при этом программирования. Для мл нужны математические знания, а не знания программирования, именно поэтому никто не хочет ебаться со строгой типизацией и медленным синтаксисом плюсов, при этом потратив больше времени на обучение.
>Для мл нужны математические знания,
> а не знания программирования,
Судя по треду, у местных нет ни того ни другого.
> не знания программирования
Хули вы тогда в pr забыли?
> не знать C++
> работать на медленном Питоне.
Изучение крестов ГОРАЗДО более выгодно в далекой перспективе
>Изучение крестов ГОРАЗДО более выгодно в далекой перспективе
В том и дело, что не выгодно, выгодным оно было когда процессоры Pentium 4 были редкостью, а видеокарты признаком зажиточности. Сейчас чуть ли не на телефоне можно нейронку запускать.
> си ++ макаки
Во-первых, CИ макаке как нехуй делать выучить Питон или Скрипт. Обратное не совсем верно.
Второе. ИТТ собрались долбоебы, которые думают, что могут делать дата сайнс, при этом не могут взять элементарную производную от гиперболического тангенса. Они думают, что выставлять нужно чилсо нейронов в заранее написанной проге делает тебя спецом. Это то же самое, как утверждать, что научившись работать в Excel ты стал спецом , которого возьмут на работу.
В третьих, хули этот тред вообще в программирование делает?
Хотите быстрые деньги - учите ПХП и скрипт. АИ это специфичный, требующий знаний матчасти и технического образования предмет.
>CИ макаке как нехуй делать выучить Питон или Скрипт. Обратное не совсем верно.
>Обратное не совсем верно.
Только в случае если ты собираешься байтоебить и писать низкоуровневую хуиту типа драйверов.
Одни только кукареки, лол.
Объявляю этот тред самым запомоенным на всем програмаче. Хуже него уже нет.
И как думаешь, их не задают в треде, потому что такие сверхразумы и гуглят сразу, или же тут просто никто ничем не занимается?
Ну бля, я вот сейчас пытаюсь вкурить в эту хуйню, но для треда вопросов нет. Нет, я могу конечно по каждой непонятке сюда срать, но никто всё равно ни на что не ответит
>в треде нет идиотских вопросов, которые можно нагуглить за секунду
>арррряяяя дебилы собрались!!!
>Пахевашая матанопетушня, уходи
Они потом еще удивляются, почему градиент в ноль ушел и сеть в насыщении
Ок, ответь на неидиотский вопрос - как приготовить данные для тренировки сети?
Вопрос, насколько быстро можно вкатиться, чтоб что-то с этого поднимать?
Матан знаю плохо, но готов это исправить.
> Сгенерировать программно
Зачем генерировать программно то, что подлежит регрессионному анализу? Если у тебя уже есть программа, которая на входные данные выдает тебе искомое значение, зачем тебе вообще нейросеть?
По-моему, люди ИТТ вообще не понимают, о чем говорят и пишут.
> Если у тебя уже есть программа, которая на входные данные выдает тебе искомое значение, зачем тебе вообще нейросеть?
Есть питоноскрипт, который выдает словари с инфой о входящих данных, по сути парсер, но он медленный.
Переписывать мне его было влом, я просто нагенерировал им данные и скормил averaged perceptron'у, написанному на цитоне, добился 300х ускорения c достаточно хорошим результатом.
Мда. Не знал, что тут настолько тупые люди. Где я писал, что у меня программа "на входные данные выдает тебе искомое значение"?
>Переписывать мне его было влом
Тут можешь остановиться и сказать, что играешься.
Если хочешь играться - играйся. Но тогда лучше скачать пару MNIST баз и играться на image recognition. Будет точно полезнее, хотя бы потому, что более практично и более применимо к реальным проблемам.
>>376783
>Не знал, что тут настолько тупые люди. Где я писал, что у меня программа
Толку от нейросети мало, если ты генеришь какие-то данные программно. Хочешь распознать паттерн? Так разберись, что у тебя программа генерит и как генерит. Но опять же, для игр подойдет.
> что более практично и более применимо к реальным проблемам
Ты понимаешь, что я использовал тот парсер и заменил его? Как ты предлагаешь мне парсить мои данные с помощью image recognition? smh
>Хочешь распознать паттерн? Так разберись, что у тебя программа генерит и как генерит.
Это такой троллинг тупостью? Зачем мне самоу разбираться и искать зависимости, если у меня нейросеть для этого есть?
>Зачем мне самоу разбираться и искать зависимости, если у меня нейросеть для этого есть?
Да потому что в 99% случаев все эти завимости давно изучены. Оставшийся 1% публикуются в научных журналах. Генерить данные кодом, а потом скармливать это нейросети - Сизифов труд.Для обучения может и Ок, на практике лучше делать то, для чего нейронки изначально писали - распознавать изображения, речь и текст.
>>376791
>Ты понимаешь, что я использовал тот парсер и заменил его?
> заменил
> Переписывать мне его было влом
Ты его не заменил. Ты написал нейронку. Окей. Если входные данные в нейронку будут в области, далекой от тренировчного датасета, то выдавать тебе она будет хуйню, в то время как исходный парсер будет работать.
> написал нейронку
Молодец, толку с того? Ты как то это хочешь использовать в приложениях или выложить на гХаб? Первая же критика - какого хуя ты просто парсер не переписал? Было лень? Тогда катись к хуям.
Видимо я не в тему, людям тред засрать надо.
Я использую ее уже почти год ежедневно и она хорошо справляется со своей задачей. Я в курсе, что не полноценная замена исходного парсера, но это и не требуется.
Я не знаю, что ты ожидаешь услышать от меня. Мог ли я потратить в 10 раз больше усилий если судить по числу строк, переписывая чужой код? Мог, но зачем?
Или ты хочешь услышать, что мне интересен машоб и я хотел поиграться с ним? Ну окей, это тоже.
![15520602945900.jpg](/pr/big/thumb/1373612/15546826830200s.jpg)
Тред можно удалять, машоб нынче не нужен.
>Оказывается, что в 2к19 нет готовых решений для определения капчи, не гугловской с выбором картинок (хотя для неё есть решение при помощи распознавания звука), а древней, буквенной капчи, при том, что буквы в одном регистре.
Готовых решений нет, потому что никому это нах не упало, какое-то абстрактное решение которое будет работать с любой капчёй всегда будет проигрывать специализированному на конкретной капче. А это проект на один вечер тащемта.
>лучше займитесь решением прикладных задач.
Без проблем, сколько платишь?
Отбитым долбоёбом нужно быть, чтобы вручную пердолить бэкпропагацию в 2019.
>какое-то абстрактное решение которое будет работать с любой капчёй всегда будет проигрывать специализированному на конкретной капче.
Именно поэтому разгадывание капч так дешево стоит. Около 2 долларов за месяц, любые капчи. Наверно сидят там и обучают каждый раз нейронку при виде новой капчи, а потом выдают результат, и всё это за пару секунд. Чудеса да и только.
>Без проблем, сколько платишь?
2 доллара в месяц.
За полгода по 8 часов в день можно вкатиться.
Это еще круче. Написал пару строк кода и не нужно держать у себя, или где-либо еще, лишние данные.
Хочу швирять данные в нейронку и ждать какой-нибудь вывод, без теории и какого-либо серьёзного бекграунда, чисто хуяк-хуяк ради фана, какой фреймворк/стек лучше всего подходит под мои цели?
Тенсорфлоу.
Только на рекапче, дебилушка.
Керас + Тенсорфлоу.
Антиаргумент. В боингах как раз классическая математика с доказательствами корректности.
Разделить на 3 набора, нормализовать.
>доказать корректность
Это же нивазможна, да и нинужна, достаточно показать результат лучше чем у человека.
>понятно, что нейронки это тупик. Годятся только для задач, где на надёжность наплевать, вроде классификации котиков, для реальных задач надо придум
Давай "умник" придумай математически корректное описание котиков.
Всегда интересовало тень от котика это тоже котик?
Куй железо пока горячо, а то украду твою идею и стану миллиардером.
В ценах акций за прошлый период тупо нет информации об их будущих ценах.
Доказали уже практически на научном уровне.
Весь "технический анализ" - по сути полная хуйня.
![лягушка gulag.jpg](/pr/big/thumb/1373612/15548025321770s.jpg)
1. Если нейросеть на основании имеющихся исходных данных не может построить модель, отображающую исходные данные в целевые, доказывает ли это напрямую то, что исходные данные просто не содержат достаточно информации о целевых данных?
2. Для каких задач не подходят сверточные нейронные сети?
3. Сможет ли сверточная нейросеть классифицировать объект на изображении, даже если он не посередине изображения, а где-нибудь в углу?
1. Нет. Может, у тебя нейросеть хуёвая. Почём нам знать, как ты её обучал, на каких данных. И вообще, что значит "достаточно информации"?
2. Для тех, где у объектов нет пространственной структуры, т.е. свёртка не нужна. (Нет, конечно, полносвязный слой можно рассматривать как свёртку, но только ради удобства).
3. Может быть. Но, конечно, зависит от того, какого размера объект и что ещё на изображении. Если у тебя посередине здоровенный кот, а сбоку от него - маленькая кружка, то не обессудь.
>Если нейросеть на основании имеющихся исходных данных не может построить модель, отображающую исходные данные в целевые, доказывает ли это напрямую то, что исходные данные просто не содержат достаточно информации о целевых данных?
Нет.
>Для каких задач не подходят сверточные нейронные сети?
Когда у тебя нет инвариантности по оси. Грубо говоря, кот в левом-верхнем углу и в правом нижнем углу - это кот. Или, например, резкий скачок биржевых данных 5 февралая и 10 октября - это резкий скачок. В первом случае инвариантность идет в пространстве изображения (и применяются 2д свертки), во втором - во времени.
Где не подходит - например, если у тебя в первом измерении площадь квартиры, во втором ее цена и так далее - никакой инвариантности тут нет, каждое измерение определяет разные вещи.
>Сможет ли сверточная нейросеть классифицировать объект на изображении, даже если он не посередине изображения, а где-нибудь в углу
Судя по этому вопросу, зря я распинался в прошлом.
>может потому нейронная сеть на то и называется нейронной, что как в мозге?
Нет, она так называется что бы пудрить мозги и получать профит.
Или вообще что читать-то? На русском (английский хоть и знаю, но слишком тяжело читать много). Видосы не нравятся, вообще этот формат терпеть не могу.
>Когда у тебя нет инвариантности по оси. Грубо говоря, кот в левом-верхнем углу и в правом нижнем углу - это кот. Или, например, резкий скачок биржевых данных 5 февралая и 10 октября - это резкий скачок. В первом случае инвариантность идет в пространстве изображения (и применяются 2д свертки), во втором - во времени.
>Где не подходит - например, если у тебя в первом измерении площадь квартиры, во втором ее цена и так далее - никакой инвариантности тут нет, каждое измерение определяет разные вещи.
А, то есть когда каждое измерение независимо, то сверточные сети применять нельзя. Верно?
Для старта даже анус пса пойдет. А там дальше разберешься. Нормально делай - нормально будет. Все, давай, на созвоне
В современных ЭБУ есть значительных проблемы с объемом ОЗУ! Связанно это с историческими факторами и с сложностью создания больших объемов ОЗУ с контролем ошибок на кристалле. А вот в калькуляторах обычно таких проблем нет поскольку ОЗУ там зачастую без контроля и процессоры индустриальные за копейку. Поэтому подходы которые использовались в 80-е и 90-е с созданием значительных массивов накопления данных применять в нормальных ЭБУ нельзя. Например: если в Январе у нас на обучение по ДК по некоему методу, там реализованному, выделено около 520 байт, то в современных ЭБУ реализация подобного метода затребовала бы около 4-х килобайт. Поэтому всю прошлую жизнь регулятора надо запомнить с использованием буквально 10-ка переменных (сотни байт не более). И методы редукции объемов данных конечно есть. Один из таких методов – применение искусственных нейронных сетей.
Искусственные нейронные сети (ИНС).
Штука довольно избитая, с ней все сейчас носятся как с писаной торбой. Нейросети то… нейросети се… нейросети читают ваши номера и выписывают вам штрафы. нейросети разве-что борщ не варят (а то бы на них можно было женится).
В основе используемых в ЭБУ искусственных нейронных сетей, как и многих других, лежит так называемый “Персептрон Розенблатта”, . предложенный в 1957 году Френком Розенблаттом.
Практическое применение ИНС получили после разработки эффективных методов обучения весов нейронов в скрытых слоях (в основном: метод обратного распространения ошибки) в 80-х годах прошлого века… Я не буду тут особо распылятся на эту тему, поскольку про все это, есть сотни статей, в том числе на русском языке и любой желающий может их “накрячить” (гугл у нас проштрафился и теперь гуглить уже не модно)… Есть хорошие обучающие видео на трубе. Несмотря на то, что я не буду подробно останавливаться тут на ИНС – я надеюсь у читателя все-таки есть представление, как именно они работают и какие проблемы решают-создают… Хотя кое-что все-таки следует написать.
ИНС, которые используются в ЭБУ получают банальным комбинированием нескольких персептронов по следующей схеме:
Собственно слой слева — называется входным слоем. Этот слой как обычно ничего не делает и передает значения на входах следующему. Слой расположенный по середине называется скрытым слоем и состоит из некоторого количества персептронов. Слой справа называется выходным слоем и содержит один персептрон. Это схемы прямого распространения сигнала без обратной связи (т.е. информация в такой сети передается cлева на право и не передается с выхода на вход). Сеть построенная на таких принципах может делать разные крутые вещи. Например универсальная теорема аппроксимации, доказанная в 1989 году Джорджем Цибенко. Гласит:
Искусственная нейронная сеть прямой связи с одним скрытым слоем, и сигмоидальной активационной функцией, может аппроксимировать любую непрерывную функцию из множества переменных с любой заданной точностью, при достаточном количестве нейронов в скрытом слое!
Эта теорему можно перефразировать, и получить то сокровенное знание которое тупые японцы так и не получили при изобретении VTEC (и спасает их лишь то – что VTEC они все же разработали чуть РАНЬШЕ, чем теорема была доказана, и чем все осознали, что случилось и как такую полезность можно применить):
Любой табличный параметр системы управления с любой заданной точностью в пространстве любого количества измерений, может быть получен в реализации искусственной нейронной сети с прямой связью, c одним скрытым слоем и сигмоидальной активационной функцией, при достаточном количестве нейронов в скрытом слое. Т.е. ну вот в той самой, что вы видите на картинке выше.
Только что, вы прочитали, как вычисляется VE в автомобиле с 2-мя плавными фазовращателями и плавным подъемом клапана на впуске, для любого из возможных соcтояний оборотов-нагрузок-поворотов валов-подъема клапанов — и при этом не используется ни одной таблицы в привычном нам 3Dвиде. Только лишь веса связей нейронной сети. И для того чтоб что то поменять в двигателе — придется перенастроить эти веса. Настраиваются они с помощью специального программного обеспечения написанного на языке matlab при этом все это обычно интегрировано с классическими старыми комплексами настройки.
И если вы не поняли – никогда и никем даже в отдаленной перспективе для такого двигателя не будут выпущены, какие либо “другие” распределительные валы… Пока шиночипы не сломают себе голову в попытке осмыслить, что же именно написано тут всего лишь в паре абзацев текста. Вот вам, то – чего не бывает, в нашей “настройке которой не бывает”! (хотя честно говоря — там даже проблемы на уровне снять-поставить эти валы).
Однако у ИНС есть один существенный недостаток – никто не понимает как именно они работают. Нет, конечно с математической точки зрения мы понимаем каждый шаг. С практической — мы понимаем как настроить веса и добиться нужного нам вывода. Но почему веса именно такие, как они есть – никто не может объяснить. Это все конечно никак не мешает их использовать – ведь людям понадобилось 1000лет, с момента постройки первых каменных кладок на связующих, чтоб понять, как именно работает цемент. Но есть какой-то осадочек… Кроме того у сетей подобного типа есть проблемы с обучением – скажем так в некоторых условиях они могут не обучатся. С точностью вывода на практике бывает тоже не все хорошо.
ИНС с описанной выше структурой требуют серьезных затрат на обучение, поэтому в ЭБУ применяются только в виде предварительно обученных. Дальше речь пойдет про еще более современную концепцию построения ИНС, которые уже будут обучатся непосредственно в ЭБУ!
В современных ЭБУ есть значительных проблемы с объемом ОЗУ! Связанно это с историческими факторами и с сложностью создания больших объемов ОЗУ с контролем ошибок на кристалле. А вот в калькуляторах обычно таких проблем нет поскольку ОЗУ там зачастую без контроля и процессоры индустриальные за копейку. Поэтому подходы которые использовались в 80-е и 90-е с созданием значительных массивов накопления данных применять в нормальных ЭБУ нельзя. Например: если в Январе у нас на обучение по ДК по некоему методу, там реализованному, выделено около 520 байт, то в современных ЭБУ реализация подобного метода затребовала бы около 4-х килобайт. Поэтому всю прошлую жизнь регулятора надо запомнить с использованием буквально 10-ка переменных (сотни байт не более). И методы редукции объемов данных конечно есть. Один из таких методов – применение искусственных нейронных сетей.
Искусственные нейронные сети (ИНС).
Штука довольно избитая, с ней все сейчас носятся как с писаной торбой. Нейросети то… нейросети се… нейросети читают ваши номера и выписывают вам штрафы. нейросети разве-что борщ не варят (а то бы на них можно было женится).
В основе используемых в ЭБУ искусственных нейронных сетей, как и многих других, лежит так называемый “Персептрон Розенблатта”, . предложенный в 1957 году Френком Розенблаттом.
Практическое применение ИНС получили после разработки эффективных методов обучения весов нейронов в скрытых слоях (в основном: метод обратного распространения ошибки) в 80-х годах прошлого века… Я не буду тут особо распылятся на эту тему, поскольку про все это, есть сотни статей, в том числе на русском языке и любой желающий может их “накрячить” (гугл у нас проштрафился и теперь гуглить уже не модно)… Есть хорошие обучающие видео на трубе. Несмотря на то, что я не буду подробно останавливаться тут на ИНС – я надеюсь у читателя все-таки есть представление, как именно они работают и какие проблемы решают-создают… Хотя кое-что все-таки следует написать.
ИНС, которые используются в ЭБУ получают банальным комбинированием нескольких персептронов по следующей схеме:
Собственно слой слева — называется входным слоем. Этот слой как обычно ничего не делает и передает значения на входах следующему. Слой расположенный по середине называется скрытым слоем и состоит из некоторого количества персептронов. Слой справа называется выходным слоем и содержит один персептрон. Это схемы прямого распространения сигнала без обратной связи (т.е. информация в такой сети передается cлева на право и не передается с выхода на вход). Сеть построенная на таких принципах может делать разные крутые вещи. Например универсальная теорема аппроксимации, доказанная в 1989 году Джорджем Цибенко. Гласит:
Искусственная нейронная сеть прямой связи с одним скрытым слоем, и сигмоидальной активационной функцией, может аппроксимировать любую непрерывную функцию из множества переменных с любой заданной точностью, при достаточном количестве нейронов в скрытом слое!
Эта теорему можно перефразировать, и получить то сокровенное знание которое тупые японцы так и не получили при изобретении VTEC (и спасает их лишь то – что VTEC они все же разработали чуть РАНЬШЕ, чем теорема была доказана, и чем все осознали, что случилось и как такую полезность можно применить):
Любой табличный параметр системы управления с любой заданной точностью в пространстве любого количества измерений, может быть получен в реализации искусственной нейронной сети с прямой связью, c одним скрытым слоем и сигмоидальной активационной функцией, при достаточном количестве нейронов в скрытом слое. Т.е. ну вот в той самой, что вы видите на картинке выше.
Только что, вы прочитали, как вычисляется VE в автомобиле с 2-мя плавными фазовращателями и плавным подъемом клапана на впуске, для любого из возможных соcтояний оборотов-нагрузок-поворотов валов-подъема клапанов — и при этом не используется ни одной таблицы в привычном нам 3Dвиде. Только лишь веса связей нейронной сети. И для того чтоб что то поменять в двигателе — придется перенастроить эти веса. Настраиваются они с помощью специального программного обеспечения написанного на языке matlab при этом все это обычно интегрировано с классическими старыми комплексами настройки.
И если вы не поняли – никогда и никем даже в отдаленной перспективе для такого двигателя не будут выпущены, какие либо “другие” распределительные валы… Пока шиночипы не сломают себе голову в попытке осмыслить, что же именно написано тут всего лишь в паре абзацев текста. Вот вам, то – чего не бывает, в нашей “настройке которой не бывает”! (хотя честно говоря — там даже проблемы на уровне снять-поставить эти валы).
Однако у ИНС есть один существенный недостаток – никто не понимает как именно они работают. Нет, конечно с математической точки зрения мы понимаем каждый шаг. С практической — мы понимаем как настроить веса и добиться нужного нам вывода. Но почему веса именно такие, как они есть – никто не может объяснить. Это все конечно никак не мешает их использовать – ведь людям понадобилось 1000лет, с момента постройки первых каменных кладок на связующих, чтоб понять, как именно работает цемент. Но есть какой-то осадочек… Кроме того у сетей подобного типа есть проблемы с обучением – скажем так в некоторых условиях они могут не обучатся. С точностью вывода на практике бывает тоже не все хорошо.
ИНС с описанной выше структурой требуют серьезных затрат на обучение, поэтому в ЭБУ применяются только в виде предварительно обученных. Дальше речь пойдет про еще более современную концепцию построения ИНС, которые уже будут обучатся непосредственно в ЭБУ!
Нечеткая логика.
Это еще более свежая концепция, объясняющая нам, что мир не черно-белый, а тепло и холодно – это не конкретные численные значения температур, а все факты которые мы знаем – не точны…Концепция введена Лофти Заде в 1965-м году и развита в более поздних работах. На бытовом уровне это можно объяснить как то, что “тепло-ташкент-жарища” – это про что-то одно, а “мороз-дубак-воркута” – про что-то другое, и эти что-то ортогонально друг другу противоположны, но все это нас мало интересует, как и сама нечеткая логика. В этом разделе нас интересует, так называема “функция принадлежности” в виде нормализованного Гауссиана (колокола), которая используется для классификации. Про нее мы и будем писать ниже.
Локальная линейная модель – LLM.
Начнем с простейшей линейной функции, ее формула для одномерного случая известна каждому:
y =”смещение” + x * “наклон”
Теперь посмотрим на картинки.
Слева мы видим некую непрерывную одномерную нелинейную функцию.
Справа — попытку аппроксимации этой функции четырьмя линейными функциями – по сути, совокупностью четырех локальных линейных моделей.
Не очень то похоже, но в реальном мире точность такого представления для использования может быть вполне достаточная – например лаг в мелких бошах как то так задавался. Но, что если не достаточно и надо точнее?!
Предположим, что этот график – единственное, что мы знаем про нашу функцию, как видим в нем 437 пикселей (я померил когда рисовал линии в нем).
Очевидно, что мы можем представить его в виде 437 линейных функций, где каждая линия будет иметь размер всего в 1 пиксель!
При этом “смещение” будет = высоте пикселя по Y оси, а “наклон”=0. Модель такой функции называется – частичной линейной моделью, без градиента и является частным случаем полной линейной модели. Но поскольку “наклон”=0 – x в нашей формуле вырождается. Тогда, как же нам определить координаты нашего пикселя по x?
Для этого нам надо добавить к каждой модели еще и функцию принадлежности этой модели к определенному участку пространства входных значений x нашей функции – так мы сможем вернуть ей зависимость от x.
Формулу принадлежности можно взять из fuzzy логики, но мы пока не будем это делать а применим простейший метод, который свяжет нашу координату по x c одной конкретной функцией из 437, и превратит наш набор цифр в совокупность из 437 линейных моделей. В нашем случае, для каждой конкретной из 437 моделей, функция вычисления принадлежности будет возвращать 1.00, если x соответствует номеру функции в пикселях и 0.00 для любого другого значения x. Умножив значение смещения для каждой нашей линейной функции на возвращаемые “веса” из функции принадлежности и просуммировав результаты, мы сможем поставить точку именно там, где надо, и полностью повторить левую картинку.
Предположим, что осей у нас больше – что это меняет?! Да ничего по сути – просто очевидно линейных моделей надо будет несколько больше…
Давайте теперь перефразируем теорему аппроксимации в таком виде: Любая непрерывная функция из множества переменных с любой точностью, может быть аппроксимирована некоторой совокупностью локальных линейных нейро-fuzzy моделей!
Совокупность локальных линейных моделей — LOLIMOT.
Метод идентификации нелинейных систем совокупностью локальных линейных моделей LOLIMOT был предложен Оливером Нильсом в конце 90-х и очень подробно описан в его монографии [1]. Такая совокупность описывается формулой:
Как видите, вычисления очень простые – нужно лишь предварительно вычислить для всех наших функций набор из весов принадлежностей, с помощью вычисления функции принадлежности а остальное вообще элементарно. И настало время понять, что такое эта самая функция принадлежности… Но сначала давайте разберемся, чем вообще этот подход отличается от ИНС, рассмотренных ранее, и чем они лучше — если аксиоматически делает вроде бы то же самое…
По сути наша картинка очень похожа на персептрон. Яйцо эквивалентно всему нейрону скрытого слоя. Сама LLM представляет набор весов и смещений нейрона. А функция принадлежности эквивалентна функции активации нейрона. Сумма справа – ничто иное как нейрон выходного слоя лишенный функции активации и с весами =1.
Нечеткая логика.
Это еще более свежая концепция, объясняющая нам, что мир не черно-белый, а тепло и холодно – это не конкретные численные значения температур, а все факты которые мы знаем – не точны…Концепция введена Лофти Заде в 1965-м году и развита в более поздних работах. На бытовом уровне это можно объяснить как то, что “тепло-ташкент-жарища” – это про что-то одно, а “мороз-дубак-воркута” – про что-то другое, и эти что-то ортогонально друг другу противоположны, но все это нас мало интересует, как и сама нечеткая логика. В этом разделе нас интересует, так называема “функция принадлежности” в виде нормализованного Гауссиана (колокола), которая используется для классификации. Про нее мы и будем писать ниже.
Локальная линейная модель – LLM.
Начнем с простейшей линейной функции, ее формула для одномерного случая известна каждому:
y =”смещение” + x * “наклон”
Теперь посмотрим на картинки.
Слева мы видим некую непрерывную одномерную нелинейную функцию.
Справа — попытку аппроксимации этой функции четырьмя линейными функциями – по сути, совокупностью четырех локальных линейных моделей.
Не очень то похоже, но в реальном мире точность такого представления для использования может быть вполне достаточная – например лаг в мелких бошах как то так задавался. Но, что если не достаточно и надо точнее?!
Предположим, что этот график – единственное, что мы знаем про нашу функцию, как видим в нем 437 пикселей (я померил когда рисовал линии в нем).
Очевидно, что мы можем представить его в виде 437 линейных функций, где каждая линия будет иметь размер всего в 1 пиксель!
При этом “смещение” будет = высоте пикселя по Y оси, а “наклон”=0. Модель такой функции называется – частичной линейной моделью, без градиента и является частным случаем полной линейной модели. Но поскольку “наклон”=0 – x в нашей формуле вырождается. Тогда, как же нам определить координаты нашего пикселя по x?
Для этого нам надо добавить к каждой модели еще и функцию принадлежности этой модели к определенному участку пространства входных значений x нашей функции – так мы сможем вернуть ей зависимость от x.
Формулу принадлежности можно взять из fuzzy логики, но мы пока не будем это делать а применим простейший метод, который свяжет нашу координату по x c одной конкретной функцией из 437, и превратит наш набор цифр в совокупность из 437 линейных моделей. В нашем случае, для каждой конкретной из 437 моделей, функция вычисления принадлежности будет возвращать 1.00, если x соответствует номеру функции в пикселях и 0.00 для любого другого значения x. Умножив значение смещения для каждой нашей линейной функции на возвращаемые “веса” из функции принадлежности и просуммировав результаты, мы сможем поставить точку именно там, где надо, и полностью повторить левую картинку.
Предположим, что осей у нас больше – что это меняет?! Да ничего по сути – просто очевидно линейных моделей надо будет несколько больше…
Давайте теперь перефразируем теорему аппроксимации в таком виде: Любая непрерывная функция из множества переменных с любой точностью, может быть аппроксимирована некоторой совокупностью локальных линейных нейро-fuzzy моделей!
Совокупность локальных линейных моделей — LOLIMOT.
Метод идентификации нелинейных систем совокупностью локальных линейных моделей LOLIMOT был предложен Оливером Нильсом в конце 90-х и очень подробно описан в его монографии [1]. Такая совокупность описывается формулой:
Как видите, вычисления очень простые – нужно лишь предварительно вычислить для всех наших функций набор из весов принадлежностей, с помощью вычисления функции принадлежности а остальное вообще элементарно. И настало время понять, что такое эта самая функция принадлежности… Но сначала давайте разберемся, чем вообще этот подход отличается от ИНС, рассмотренных ранее, и чем они лучше — если аксиоматически делает вроде бы то же самое…
По сути наша картинка очень похожа на персептрон. Яйцо эквивалентно всему нейрону скрытого слоя. Сама LLM представляет набор весов и смещений нейрона. А функция принадлежности эквивалентна функции активации нейрона. Сумма справа – ничто иное как нейрон выходного слоя лишенный функции активации и с весами =1.
Теперь посмотрите на картинку выше с красной линией, я тоже посмотрю на нее и напишу это:
Для модели 1 вес нейрона смещения = 8.0, а вес нейрона входа 1 = -25.0
Представляете как легко обучается такая ИНС?, если я смог просто посмотреть на картинку и назвать веса. Забудьте про любые проблемы обучения, про горы вычислений с плавающей точкой, про ошибки дифференцирования, которые усиливаются при распространении ошибки во внутренние слои, про то, что у вас может вообще ничего не выйдет из-за сваливания в локальную яму. Эта штука может обучатся, даже внутри самого дешевого микроконтроллера который умеет лишь в знаковый int! Для использования в качестве функции поправки для лямбды (наш частный случай) на начальном этапе обучения все веса просто обнуляются – в итоге функция приходит к нормальному состоянию выхода (=0) т.е. отсутствия какой-то поправки.
Функция принадлежности к модели
Что такое функция принадлежности Я буду объяснять на конкретном примере. Возьмем такой набор значений:
X1=1 Y1=10
X2=2 Y2=5
X3=3 Y3=15
Мы опять же, не знаем какая именно функция представлена этим набором цифр и каково ее поведение в неуказанных тут точках, поэтому для ее представления мы будем использовать тот же самый метод, что раньше и с пикселями на картинке – “частичные линейные модели без гадиента”, поэтому у нас будет 3 модели с экстремумами в известных точках X = 1 2 и 3 для каждой соответственно. Построим Гауссовские функции (колокола) с экстремумами в этих точках и пиком амплитуды = 1:
с – это у нас центры координат соответствующих моделей т.е они принимают значения 1 2 и 3.
сигма – стандартное отклонение параметров модели. (их графический смысл указан синими стрелочками).
Формулу Гауссиана вы видите справа на картинке:
У выбранной функции принадлежности есть проблема – она не учитывает наши знания о пространстве значений выше и ниже крайних, т.е если скажем мы растянем ось X до 100 то диапазон от 5 до 100 окажется у нас никак не охваченным, и для больших X наши функции вернут 0, хотя очевидно, что функция принадлежности должна в любом случае вернуть какое то не нулевое значение хотя бы для одной модели, поэтому нам надо нормализовать то, что мы построили по специальной формуле:
Суть этого действия в том, чтоб для любого участка пространства значений совокупное значение суммы весов принадлежностей оказалось = 1, таким образом в любой точке пространства в любом возможном случае всегда работает какая-то одна (или несколько) моделей из тех что у нас есть при этом их веса распределены между соответствующими моделями так, чтоб в сумме они составили 1.00 (или 100%).
После того, как мы получили значения функции принадлежности, мы можем обучить нашу ИНС (а точнее, так же как и с пикселями, просто ввести в соответствующие ячейки веса смещения при весах входа=0, поскольку такая простая модель никакого обучения не требует и в ней веса — это cсобственно и есть выходные значения). Затем вычислить результат ее работы Y для любого исходного значения x:
Применение Гауссовских функций принадлежности дает нам просто идеальные стыки графика на границах моделей (например X=1.5) где у нас нет никаких априорных знаний о свойствах нашей функции.
Ну и наконец приведем всю формулу нашей частной модели и функции ее принадлежности, хотя она и не сильно отличается, от полной модели рассмотренной ранее:
Именно этот упрощенный метод без градиентов используется при обучении по лямбде, для детонации например, используется уже полный метод с градиентами! Т.к. в случае детонации можно ожидать наличия связи с нагрузкой и оборотами – в случае же лямбды такой связи очевидно нет!
Теперь посмотрите на картинку выше с красной линией, я тоже посмотрю на нее и напишу это:
Для модели 1 вес нейрона смещения = 8.0, а вес нейрона входа 1 = -25.0
Представляете как легко обучается такая ИНС?, если я смог просто посмотреть на картинку и назвать веса. Забудьте про любые проблемы обучения, про горы вычислений с плавающей точкой, про ошибки дифференцирования, которые усиливаются при распространении ошибки во внутренние слои, про то, что у вас может вообще ничего не выйдет из-за сваливания в локальную яму. Эта штука может обучатся, даже внутри самого дешевого микроконтроллера который умеет лишь в знаковый int! Для использования в качестве функции поправки для лямбды (наш частный случай) на начальном этапе обучения все веса просто обнуляются – в итоге функция приходит к нормальному состоянию выхода (=0) т.е. отсутствия какой-то поправки.
Функция принадлежности к модели
Что такое функция принадлежности Я буду объяснять на конкретном примере. Возьмем такой набор значений:
X1=1 Y1=10
X2=2 Y2=5
X3=3 Y3=15
Мы опять же, не знаем какая именно функция представлена этим набором цифр и каково ее поведение в неуказанных тут точках, поэтому для ее представления мы будем использовать тот же самый метод, что раньше и с пикселями на картинке – “частичные линейные модели без гадиента”, поэтому у нас будет 3 модели с экстремумами в известных точках X = 1 2 и 3 для каждой соответственно. Построим Гауссовские функции (колокола) с экстремумами в этих точках и пиком амплитуды = 1:
с – это у нас центры координат соответствующих моделей т.е они принимают значения 1 2 и 3.
сигма – стандартное отклонение параметров модели. (их графический смысл указан синими стрелочками).
Формулу Гауссиана вы видите справа на картинке:
У выбранной функции принадлежности есть проблема – она не учитывает наши знания о пространстве значений выше и ниже крайних, т.е если скажем мы растянем ось X до 100 то диапазон от 5 до 100 окажется у нас никак не охваченным, и для больших X наши функции вернут 0, хотя очевидно, что функция принадлежности должна в любом случае вернуть какое то не нулевое значение хотя бы для одной модели, поэтому нам надо нормализовать то, что мы построили по специальной формуле:
Суть этого действия в том, чтоб для любого участка пространства значений совокупное значение суммы весов принадлежностей оказалось = 1, таким образом в любой точке пространства в любом возможном случае всегда работает какая-то одна (или несколько) моделей из тех что у нас есть при этом их веса распределены между соответствующими моделями так, чтоб в сумме они составили 1.00 (или 100%).
После того, как мы получили значения функции принадлежности, мы можем обучить нашу ИНС (а точнее, так же как и с пикселями, просто ввести в соответствующие ячейки веса смещения при весах входа=0, поскольку такая простая модель никакого обучения не требует и в ней веса — это cсобственно и есть выходные значения). Затем вычислить результат ее работы Y для любого исходного значения x:
Применение Гауссовских функций принадлежности дает нам просто идеальные стыки графика на границах моделей (например X=1.5) где у нас нет никаких априорных знаний о свойствах нашей функции.
Ну и наконец приведем всю формулу нашей частной модели и функции ее принадлежности, хотя она и не сильно отличается, от полной модели рассмотренной ранее:
Именно этот упрощенный метод без градиентов используется при обучении по лямбде, для детонации например, используется уже полный метод с градиентами! Т.к. в случае детонации можно ожидать наличия связи с нагрузкой и оборотами – в случае же лямбды такой связи очевидно нет!
![изображение.png](/pr/big/thumb/1373612/15549691761580s.jpg)
Ну и наконец функция обучения весов.
Для случая с лямбда регулятором мы конечно не можем так пальцами в картинки тыкать и поэтому нам нужна функция обучения весов. Но она настолько проста, что мне даже лень ее объяснять. Поэтому пусть это будет просто кусок исходника на С.
Разве что стоит сказать про fak – это ошибка выхода умноженная на скорость обучения (некий желаемый коэффициент меньше 1.00 – обычно принимает довольно маленькое значение около 0.05).
Редукция числа моделей и входов.
Как вы поняли это еще не все преимущества такого подхода, перед классическими ИНС на персептронах. Для работы любой ИНС нам необходимо еще при проектировании жестко задать количество входов, поскольку с этим связанно выделение памяти. В случае с LOLIMOT вы конечно тоже задаете количество входов – но эти входы расположены не просто так, а строго в порядке предполагаемой их важности для процесса обучения регуляторов. И если например в какой-то момент при адаптации вы видите, что вход стоящий последним не оказывает никакого влияния на вашу функцию и не имеет смысла – вы можете его отключить! Тем самым уменьшить количество вычислений и конечно же — уменьшить количество необходимых моделей, а значит ускоряется и процесс обучения и работа процессора ЭБУ в целом. Ведь любые математические штуки, даже самые простые, требуют значительных ресурсов для вычислений – а этих ресурсов может и не быть, либо они могут быть нужны нам для чего-то другого…
Редукция вывода сети.
Это тоже очень важное свойство нашего метода, важное именно для обучения c использованием лямбды. Дело в том, что лямбда может внезапно сдохнуть. Но перед тем, как система управления поймет, что лямбда сдохла – лямбда может усиленно делать вид, что живая, и при этом прилично так врать. С этим связаны очень серьезные проблемы в простых “лоховских” решениях, типа “подключим мы ка лямбду к примитивному ЭБУ напишем в нем примитивный регулятор и все у нас будет хорошо” – на самом деле _хорошо_ не будет! Мало того все будет очень плохо но не сейчас а позже… В общем такое поведение приводит к значительным ошибкам обучения запоминаемым в наших моделях. Если бы мы использовали классическую ИНС – с этим ничего нельзя было бы сделать. Но у нас сеть с неким “нормальным состоянием” – и в этом нормальном состоянии ее веса = 0, и в процессе работы они увеличиваются до каких-то относительно небольших значений ограниченных алгоритмом обучения. Следовательно, мы можем предположить, что в адекватном случае работы, веса в обученной сети так же не должны превышать какие-то определенные небольшие значения. Поэтому мы можем после обнаружения проблемы с лямбдой минимизировать последствия накопления ошибок в LOLIMOT — например однократно ограничить веса, каким-то значением, или умножить всю сетку весов на какое-то значение меньше 1.00. Таким образом, оставив полезные “малые” поправки и убрать вредные “большие”. Есть у этого конечно и отрицательные моменты – в современной системе у вас так половина машины сдохнет, а вы даже и не поймете, что это произошло…
И так ознакомившись с теорией мы готовы к тому, чтоб окунуться в практику и посмотреть на конкретную реализацию функции обучения для лямбда-регулятора на базе совокупности локальных линейных моделей.
![изображение.png](/pr/big/thumb/1373612/15549691761580s.jpg)
Ну и наконец функция обучения весов.
Для случая с лямбда регулятором мы конечно не можем так пальцами в картинки тыкать и поэтому нам нужна функция обучения весов. Но она настолько проста, что мне даже лень ее объяснять. Поэтому пусть это будет просто кусок исходника на С.
Разве что стоит сказать про fak – это ошибка выхода умноженная на скорость обучения (некий желаемый коэффициент меньше 1.00 – обычно принимает довольно маленькое значение около 0.05).
Редукция числа моделей и входов.
Как вы поняли это еще не все преимущества такого подхода, перед классическими ИНС на персептронах. Для работы любой ИНС нам необходимо еще при проектировании жестко задать количество входов, поскольку с этим связанно выделение памяти. В случае с LOLIMOT вы конечно тоже задаете количество входов – но эти входы расположены не просто так, а строго в порядке предполагаемой их важности для процесса обучения регуляторов. И если например в какой-то момент при адаптации вы видите, что вход стоящий последним не оказывает никакого влияния на вашу функцию и не имеет смысла – вы можете его отключить! Тем самым уменьшить количество вычислений и конечно же — уменьшить количество необходимых моделей, а значит ускоряется и процесс обучения и работа процессора ЭБУ в целом. Ведь любые математические штуки, даже самые простые, требуют значительных ресурсов для вычислений – а этих ресурсов может и не быть, либо они могут быть нужны нам для чего-то другого…
Редукция вывода сети.
Это тоже очень важное свойство нашего метода, важное именно для обучения c использованием лямбды. Дело в том, что лямбда может внезапно сдохнуть. Но перед тем, как система управления поймет, что лямбда сдохла – лямбда может усиленно делать вид, что живая, и при этом прилично так врать. С этим связаны очень серьезные проблемы в простых “лоховских” решениях, типа “подключим мы ка лямбду к примитивному ЭБУ напишем в нем примитивный регулятор и все у нас будет хорошо” – на самом деле _хорошо_ не будет! Мало того все будет очень плохо но не сейчас а позже… В общем такое поведение приводит к значительным ошибкам обучения запоминаемым в наших моделях. Если бы мы использовали классическую ИНС – с этим ничего нельзя было бы сделать. Но у нас сеть с неким “нормальным состоянием” – и в этом нормальном состоянии ее веса = 0, и в процессе работы они увеличиваются до каких-то относительно небольших значений ограниченных алгоритмом обучения. Следовательно, мы можем предположить, что в адекватном случае работы, веса в обученной сети так же не должны превышать какие-то определенные небольшие значения. Поэтому мы можем после обнаружения проблемы с лямбдой минимизировать последствия накопления ошибок в LOLIMOT — например однократно ограничить веса, каким-то значением, или умножить всю сетку весов на какое-то значение меньше 1.00. Таким образом, оставив полезные “малые” поправки и убрать вредные “большие”. Есть у этого конечно и отрицательные моменты – в современной системе у вас так половина машины сдохнет, а вы даже и не поймете, что это произошло…
И так ознакомившись с теорией мы готовы к тому, чтоб окунуться в практику и посмотреть на конкретную реализацию функции обучения для лямбда-регулятора на базе совокупности локальных линейных моделей.
Используется сеть структуры – 3 входа, 10 локальных линейных моделей. (реализация допускает до 15 LLM). Упрощенных метод — без градиентов. Сеть редуцированна по входам – 4й вход на который может быть выведено множество переменных — не задействован.
В качестве входных параметров: обороты (nkw), относительная топливоподача (rk), температура двигателя (tmot).
Центры моделей сети представлены следующими значениями:
Стандартные отклонения для моделей:
При первом взгляде может показаться, что центры и стандартные отклонения выбраны странно – но первый взгляд в этом случае всегда обманчив! Помните про нормализацию, которая распространяет действие модели на всю ось? Так вот обычно всегда задействованы две, а иногда и три модели одновременно. 5я по счету модель работает практически всегда. “Холодные” 7-я и 8-й модели работают на прогреве зимой и в области низких нагрузок. Холостой на прогретом моторе обслуживает 4-я модель, на холодном моторе 2-я. 1-я модель, определяет поведение в зоне низких нагрузок на холодном моторе 6-я на горячем.
Посмотрим несколько симуляций расчета функции принадлежности в excell, для того, чтоб видеть, как модели будут сменять друг друга в разных условиях работы двигателя.
И так мы получили сложнейшую функцию обучения с плавными переходами между моделями с трехмерной сеткой входов и она у нас занимает всего каких то ничтожных 40 байт в ОЗУ!
Ладно на сегодня хватит пожалуй писанины. Увидимся в следующей серии.
Список литературы:
1) Nelles Oliver: Nonlinear System Identification: From Classical Approach to Neural Networks and Fuzzy Models. Springer, Berlin (2001)
2) Материалы конференции "Artificial Neural Networks and Machine Learning – ICANN 2014" стр 153-160 Torsten Fischer and Oliver Nelles: "Merging Strategy for Local Model Networks Based on the Lolimot Algorithm" Springer (2014).
![fb521f48d581.png](/pr/big/thumb/1373612/15549875053460s.jpg)
Надо написать классификатор изображений на овердохуя классов.
Проблема в том, что для каждого класса у меня OCHE MALO изображений - штук по 50 для каждого.
Переобучение после третьей эпохи нахуй.
Рейт ниже плинтуса. Че делать?
Читал статью в блоге кераса "Building powerful image classifier using very little data" (или как-то так), но дело в том, что там под вери литл дата имеют ввиду аж 2000 изображений блять.
(по 1000 на класс).
Возможно вообще обучить сеть, юзая по 50 семплов на класс?
Что за модель-то используешь? С нуля вряд ли, а вот готовую подогнать можно и с 50-ю классами.
Ну, честно говоря, я только начал пока. Сейчас тупо отпизды выбрал простейшую сеть.
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=input_shape))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
С нуля показывает рейт 2%, что чуть лучше, чем тупой рандом.
Сейчас запустил то же самое с раширением данных, прогнал на 10 эпохах - переобучения нет, что самое главное, но рейт еще ниже.
Но, мне кажется, это оттого, что эпох мало. Ну, раз в переобучение не уперся, значит тупо эпохи не дожал. Сейчас вертится обучение на 50 эпохах.
Да, я знаю про дообучение готовой.
Сейчас пытаюсь выжать максимум из нулевой, чтобы было на что опираться.
Если хотя бы 10% выжму на нулячей, можно считать успех...
Бери готовую вроде VGG19, у твоей малюсенькой модели никаких шансов. Два конволюционных слоя + один dense это вообще ни о чём, это максимум MNIST классифицировать. Картинки-то хоть какого размера? dropout, кстати, попробуй убрать
Да я понимаю, что с нуля на таком милипиздрическом количестве образцов на класс у обученной с нуля сети шансов нет.
Но хочу пока что просто посмотреть, сколько можно выжать, не прибегая к дообучению готовой сети.
>Картинки-то хоть какого размера?
Разные, от 100x100 до 1000x1000 максимум. В среднем хуйня, 300x400 где-то.
В генераторе все шакалятся до 150x150.
>dropout, кстати, попробуй убрать
Первоначально без него запускал, 3 эпохи и все, переобучение. На тестовых данных рейт, как и положено, стремительно растет аж до 95%, но на тестовых в районе 0.01-0.02.
С дропаутом переобучение наступает медленее немного, 5 эпох.
Тестовый прогон с расширением данных показал, что на 10 эпохах переобучения нет.
Сейчас запустил то же самое на 50 эпохах. Посмотрим че выйдет.
Это базовая модель, чисто чтобы убедиться, что это говно вообще работает и мои изменения влияют на результат.
Специально никак не выставлял. Видимо используется стандартный керосовский.
Ну и все остальные гиперпараметры тоже отпизды стоят.
Говорю же, просто пробую пока, изучаю что вообще происходит
![Screenshot181.png](/pr/big/thumb/1373612/15549975717250s.jpg)
Потому что сеть маленькая? Слоев мало?
Сколько к успеху шли?
Пиздец, 10% рекорд короче.
Это при дообучении resnet50.
Но, возможно, я просто долбоеб и что-то не так делаю
Потому что сеть большая, слоев много
![proxy.duckduckgo.com.png](/pr/big/thumb/1373612/15550312997190s.jpg)
>Проблема в том, что для каждого класса у меня OCHE MALO изображений - штук по 50 для каждого.
В чем проблема доразметить? Скорее всего это лучший вариант, анон.
>Че делать?
Для начала аугментировать данные. Отразить-повернуть по 4 осям - это однозначно (если это имеет смысл конечно, в перевернутой цифре 6 например смысла мало). Далее, можно поповорачивать на произвольный угол, потому что сверточные сети по дефолту о поворотах ничего не знают. Затем "В генераторе все шакалятся до 150x150" - скорее всего зря. Скорее всего лучше и кропать и ресайзить. Все зависит от самих данных. Если у тебя коты, кропать 1000х1000 в 150х150 навернок не стоит. Но если у тебя деревья - то далеко не факт.
Затем, если у тебя есть много, очень много неразмеченных данных, можно запилить GAN-сеть (progressive gan например - давно не интересовался темой, какой там state of art сейчас, но эта хуйня точно работает). Погонять ее пару дней, и взять дискриминатор как основу для дообучения. Если же GAN так ничего осмысленного не загенерит, это скажет много о распределении твоих данных. Брать VGG, тренированную на котах, и пытаться размечать с помощью них спутниковые фотки - идея так себе. Но, с другой стороны, если ты найдешь похожий датасет, можно сначала потренировать на нем, а потом уже на своем датасете.
По поводу сеток, слишком сложные не бери. Смысла ноль. Советую inception, в частности googlenet. Как бейслайн самое то.
Иду на аналитика, теорвер в вузе ещё не проходил (только через год!), надо ОЧЕНЬ СРОЧНО понять линейную и логистическую регрессии, КАКИЕ ВЕЩИ (а ещё лучше -- прям главы учебника конкретного) знать НЕОБХОДИМО из теорвера/матстата, чем меньше -- ТЕМ ЛУЧШЕ! Сам с физтеха, разбираюсь быстро, но учить вообще не вариант, вот желательно самый сжатый формат, чтобы я на интуитивном уровне понимал, что там, и скриптил на питончике, чувствуя себя уверенно.
![Screenshot188.png](/pr/big/thumb/1373612/15550692193890s.jpg)
>В чем проблема доразметить? Скорее всего это лучший вариант, анон.
Эт, конечно, заебись затея, но я не могу расширить датасет.
>Для начала аугментировать данные.
Так уже...
>Брать VGG, тренированную на котах, и пытаться размечать с помощью них спутниковые фотки - идея так себе
Но в мануалах кераса прям так и говорят, что можно брать сеть, тренированную на котах и распознавать с ее помощью даже речь.
Вот пикрил на кошечках-собачках, что сука характерно, конечно, любые отпизды выбранные параметры выдают 90%.
А на моей задаче 7% пока рекорд
ты уверен, что ты лейблы не перепутал или потерял где-то? попробуй сделать numpy.random.shuffle на массиве лейблов и посмотри как это влияет на результаты
>Но в мануалах кераса прям так и говорят, что можно брать сеть, тренированную на котах и распознавать с ее помощью даже речь.
Так все упирается в количество данных. Если у тебя их бесконечно, за бесконечное время ты перетренируешь вообще любую сеть. А у тебя данных мало, поэтому тебе единственный вариант набрать низкоуровневых фич с другого датасета, а своим уже оттюнить высокоуровневые.
Низкоуровневые фичи можно набирать и в unsupervised манере.
>А на моей задаче 7% пока рекорд
А у генератора случайных чисел какой рекрод будет? Сколько классов у тебя?
Да вроде все верно, проверил на датасетах кошки/собаки + рентгеновских снимках легких, везде с первой же эпохи высокие рейты.
>>379771
>А у тебя данных мало, поэтому тебе единственный вариант набрать низкоуровневых фич с другого датасета, а своим уже оттюнить высокоуровневые.
Вот вопрос тогда - насколько низкоуровневые признаки надо брать? Я пытаюсь обучать последний сверточный блок (ну, там где 3 штуки Conv2d) VGG16.
Может, надо вообще пару первых слоев оставить, а остальное обучать?
По логике да, я пытаюсь искать признаки моих пич среди высокоуровевых собачьих глаз
>А у генератора случайных чисел какой рекрод будет? Сколько классов у тебя?
200 классов, по 50 изображений на класс.
У рандома, соответственно, шанс 1/200, 0.5%
В целом, сесть имеет статистическую мощность и выдает эти 2-3-7 процентов, что лучше рандома.
Но все равно с человеческой точки зрения это ни о чем же.
>Вот вопрос тогда - насколько низкоуровневые признаки надо брать?
Поэксперементируй десу.
>Может, надо вообще пару первых слоев оставить, а остальное обучать?
Поищи визуализации слоев, когда из белого шума градиентым спуском максимизируют активации на данном слое, в этих слоях хуйни типа линий под разным наклоном, они как правило универсальны для любых визуальных данных. Думаю до половины сетки ты можешь использовать точно.
>Может, надо вообще пару первых слоев оставить, а остальное обучать?
Тут еще два стула на самом деле. Можно обучать с нуля, можно обучать с уже обученного. Я предпочитаю делать и так и так. То есть глубокие слои я инициализирую заново, а верхние не переинициализирую, но и обучение на них не фиксирую. Правда это имеет больше смысла в случае resnet'ов.
Алсо не понятно, почему у тебя не resnet в 2019 году. У тебя из-за того что мало данных градиент до верхних слоев просто не доходит. То есть у тебя не просто переобучение, у тебя самые нижние слои переобучаются и на этом все обучение заканчивается.
Короче бери сетку у который максимум перформанса при минимуме параметров и residual связями. Вот это короче https://github.com/titu1994/Inception-v4/blob/master/inception_resnet_v2.py
По идее это на порядок ускорит обучение, правильно?
>Подскажи плиз, откуда взялось такое ебанистическое число параметров?
Это 107648 из слоя flatten умножить на 256 из слоя dense.
107648 это 29x29x128 из последнего пулинга после flatten.
Любой dense layer это матрица размером вход х выход, в них как правило больше всего параметров.
>А что если выпилить каналы и сделать изображения черно-белыми?
Можешь поместить после входа Conv1D с параметрами 1х1х1, он сплющит твою картинку в черно-белую.
Обучение это ускорит только для первого слоя, потому что у тебя что у тебя из 3 каналов делается 64, что из 1 канала делается 64, потом число каналов не поменяется. Нет смысла короче.
>Любой dense layer это матрица размером вход х выход
Ок, спс тебе, анон!
>Обучение это ускорит только для первого слоя, потому что у тебя что у тебя из 3 каналов делается 64, что из 1 канала делается 64, потом число каналов не поменяется.
Хмм, вроде понимаю. Ведь один хуй же происходит свертка, да потом еще пулинг, число данных уменьшается.
Верно ли, что я тогда могу изображения на входе особо не шакалить? Ведь они все равно будут сжаты свертками и пулингом.
Еще охуенно важный вопрос, подскажи плиз, что такое GlobalAveragePooling2D()?
Видел в куче сетей, в отличие от Flatten'а не увеличивает число параметров. Где тут наеб?
![proxy.duckduckgo.com.png](/pr/big/thumb/1373612/15550877036710s.jpg)
>Верно ли, что я тогда могу изображения на входе особо не шакалить
В целях ускорения нет. Лучше число фильтров на последних слоях уменьшать, или увеличивать даунскейл при пулинге.
Либо заменять большие квадратные фильтры на комбинацию более простых. Опять inception короче.
>Верно ли, что я тогда могу изображения на входе особо не шакалить?
Нет большого смысла делать то, что сетка может сделать сама. Разного рода конвертации типа RGB->YUV, RGB->Grayscale это просто 1x1x3 либо 1x1x1 свертки с зафиксированными параметрами. Если ты про даунскейл, то тоже, добавить лишний слой с малым числом фильтров и спулить потом все - это практически бесплатно. А вот вещи типа поворотов или, например, преобразования Фурье, кепструмов-хуепструмов имеет смысл пилить вручную. Потому что сама сетка не научится это делать за время жизни вселенной.
>Еще охуенно важный вопрос, подскажи плиз, что такое GlobalAveragePooling2D()?
Это AveragePooling с размером кернела во все изображение. То есть на входе у тебя hxw, на выходе будет один многоканальный пиксель.
У dense-слоев наибольшее число степеней свобод, они умеют все то же, что сверточные слои, и еще кучу всего сверху. Чтобы ускорить обучение, мы объявляем, что у нас есть инвариантность вдоль осей w и h (но не в фильтрах, они мапятся каждый-с-каждым как в dense-слоях), и получаем сверточные слои, в которых эта инвариантность жестко зашита. При этом любой такой сверточный слой представим в виде dense-слоя с большим числом нулей и одинаковых параметров вдоль диагонали матрицы (см. пикрелейтед для 1д случая).
На самых глубоких слоях мы утоптали наше пространственное режение до 29х29, поэтому говорим, что все, пространственной инвариантности у нас нет. И хуячим dense-слой, то есть по сути 'valid' свертку размером 29х29.
Что касается GlobalAveragePooling2D, то здесь dense layer заменен вообще средним арифметическим. Какой тут инвариант подразумевается сам подумай, я не знаю.
>Это AveragePooling с размером кернела во все изображение. То есть на входе у тебя hxw, на выходе будет один многоканальный пиксель.
Хуясе. Понял, анон.
Кстате, походу я долбоеб кто бы сомневался.
Я понял, откуда берутся эти охуилярды параметров.
Я подключаю полносвязный слой к полноценной пикче 29x29, ясен хуй это много параметров.
Количество сверточных слоев должно быть таким, чтобы в итоге уменьшать пикчу до нескольких пикселей.
Тогда и больше высокоуровневых признаков будет извлечено и быстрее все будет происходить.
Вроде все делал как обычно.
Дообучал первый (последний? Короче тот, что с высокоуровневыми признаками) сверточный слой VGG16.
Первые 10 эпох копошилось в районе 0.01, потом выросло до 10, а потом до 40.
Так, с этим уже можно работать.
Наконец-то поведение этой хуйни начинает напоминать то, о чем я читал в книжке.
Я уж думал я совсем даун кого я обманываю, это так и есть
Запускаю одну и ту же сетку.
VGG16, fine tuning верхнего сверточного блока.
Всего по 50 примеров на класс.
Аугментация изображений.
30 эпох.
Довольно рандомное поведение наблюдается.
3 раза запускал, каждый раз разные проценты.
От 40 до 60.
Связано ли это с аугментацией изображений?
Тип что рандомно там нагенерилось, так сеть и обучилась.
Пездос, оно работает, я в шоке, думал выше 7% не прыгну вообще.
Это еще старая базовая сеть, можно же всякие инсепшены и реснеты брать + кросс-валидацию, ибо примеров мало, еще гиперпараметры подрочить...
>Связано ли это с аугментацией изображений?
А она у тебя каждый раз разная, лол?
Learning rate уменьши
Ну рандомные преобразования же, ну.
Конечно разная.
Повороты там, отражения, искажения.
Валидационные данные остаются как есть, разумеется.
>Learning rate уменьши
Вот с ним немного экспериментировал. При сильно большом потери огромные.
Но тоже вполне себе гиперпараметр и его стоит подрочить, согласен.
Знаешь что про one cycle? Что это? Вроде как динамический learning rate.
>Ну рандомные преобразования же, ну.
Они не должны быть настолько рандомными. Тебе важна повторяемость результатов для итерационных улучшений. Рандома должен быть минимум. Сгенерил гигабайт рандомных картинок и юзаешь их и только их. Иначе вклад любых твоих изменений, даже позитивных, утонет в шуме такого рандома.
В теории даже рандомную инициализацию весов можно зарубить, на практике большой роли это не играет.
>Знаешь что про one cycle? Что это? Вроде как динамический learning rate.
Ставишь lr очень низким, и плавно его наращиваешь до экстремальных значений. Внимательно смотришь график loss - в какой-то момент его заколбасит. Берешь четверть от этого числа и обучаешь начиная с этой четверти до числа. Я пробовал, у меня сработало. Вместо 10 поколений стало обучаться за 2. Но точность выше не стала.
![Без названия.png](/pr/big/thumb/1373612/15551399823720s.jpg)
Понял, спасибо, анон.
Подскажи, что за хуйня происходит на пике?
С одной стороны вроде переобучение, но валидейшн-рейт тоже растет потихонечку.
![Screenshot199.png](/pr/big/thumb/1373612/15551417444570s.jpg)
>Ставишь lr очень низким, и плавно его наращиваешь до экстремальных значений. Внимательно смотришь график loss - в какой-то момент его заколбасит.
Seems legit
NVIDIA открыла код системы машинного обучения, синтезирующей пейзажи по наброскам
Компания NVIDIA опубликовала исходные тексты системы машинного обучения SPADE (GauGAN), позволяющей синтезировать реалистичные пейзажи на основе грубых набросков, а также связанные с проектом нетренированные модели. Система была продемонстрирована в марте на конференции GTC 2019, но код был опубликован только вчера. Наработки открыты под свободной лицензией CC BY-NC-SA 4.0 (Creative Commons Attribution-NonCommercial-ShareAlike 4.0), допускающей использование только в некоммерческих целях. Код написан на языке Python с применением фреймворка PyTorch.
https://www.opennet.ru/opennews/art.shtml?num=50507
Заебись, дообучаем генерировать йобы по наброскам
![15443451318580.jpg](/pr/big/thumb/1373612/15551466172890s.jpg)
Ну вот допустим вспомнил/подтянул я теорвер, линал, статистику, подучил питон, балуюсь с выборками данных из ОП-поста.
А дальше что? Опыта-то нет, кому из работодателей нужен такой работник?
Ну и вопрос - а как устроиться? Как вы устраивались?
Инб4 записаться на курсы за 999999 по DataScience
Знаю только либо людей, которые без опыта и познаний в математике устраивались в стартапы по знакомству, либо задротов, которые после ШАДа шли в Яндекс. Остальные не нашли работу и ушли в программирование.
Все то же самое, запускаю на домашнем пека с маленьким batch size, чтобы в память видюхи влез - вообще сука не сходится.
При запуске на сервере с большим batch size - сходится и обучается нормально.
В чем дело?
Как быть? Что делать? Можно заставить модель сходится на говножелезе?
Пока попробовал уменьшить изображения на входе, но увеличить batch size, посмотрим что выйдет
По идее чем больше образцов захавано при расчете градиента, тем более адекватна оценка.
Может ли быть такое, что слишком большой batch size ухудшает модель?
Жопой прочитал, у тебя ж как раз батч сайз маленький. Ну, тоже сёдла, но по более простой причине - градиента только в одном направлении недостаточно, ставь больше батч.
> Что делать?
Больше батч, вон, ты же видишь что лучше выходит. Ну или бустить.
>>380322
>Больший batch size - всегда лучше?
Зависит от задачи, но в общем - лучше в самый раз, не больше ни меньше.
Ты же в курсе, что SGD сходится только если уменьшать LR?
> Аноны, почему модель не сходится при маленьком batch size'е?
При изменении batch size для того же перформанса нужно поменять и learning rate так, чтобы отношение bs/lr было константным. Когда ты снизил batch size, тебе нужно было снизить и lr. Ты этого не сделал, в итоге у тебя lr слишком большой со всеми вытекающими.
У нас в мухосрани есть вакансии в CV. Сомневаюсь, что там все уберменши с бэкграундом уровня Szeliski Book, в стране в вузах такого уровня подготовки нет.
В /dr есть дневник научного сотрудника, делает кампутерное зрение для ракет.
Я просто охуел, когда увидел. Прост приходишь такой и запускаешь свой говнокод на настоящей видюхе.
Откуда у них столько денег?
Там еще и по несколько штук одновременно можно запускать, на амазоне бы это стоило 5 баксов за час
Ты в курсе, что OpenCV разрабатывается русскими и если ты прямо сейчас зайдешь на гитхаб, ты увидишь в последних коммитах одни русские фамилии?
Как же вы заебали с этим дрочем на западные вузы. Успехи в Computer Vision зависят прежде всего от способностей к прикладной математике, а математическая подготовка у нас нормальная, даже ее недостатки - они скорее области переусложнения, а не упрощения. И компьютерное зрения традиционно сильная сторона русских.
>уровня Szeliski Book
Ну в этой книжке самые азы как раз.
>Откуда у них столько денег?
Каких денег, они утилизируют простаивающие мощности на которых в другое время корпорации будут считать реальный код. Взамен получают статистику.
Живу на родине OpenCV, сижу с разработчиками в одном офисе Нижний Новгород, Intel. Некоторых их этих людей я знаю лично. У них хорошо с математикой, но эту книгу они бы признали очень сложной.
Эта книжка просто введение в специальность. По любой теме краткое описание без особой практики, а хочешь что-то реализовать действительно - пиздуй читать статьи, на которые она ссылается. Может, она для тебя сложная, но проще не бывает.
Unless туториалы от васяна, где эти алгоритмы представлены как черные ящики и ты просто их используешь.
>Unless туториалы от васяна, где эти алгоритмы представлены как черные ящики и ты просто их используешь
99% Машин лернинга.
>что OpenCV разрабатывается русскими
Чего бля? Это сборник алгоритмов начиная с 50х, и да, никакой супер йобы толком с ними не сделаешь. А так, да, наши ботаны запилили.
>Некоторых их этих людей я знаю лично
А они разве не посъебывали, вроде как основатели встали на тапки?
Не в курсе насчет основателей, но многие нынешние контрибуторы в OpenCV все еще здесь. Некоторые съебали из Intel и запилили свои стартапы, с упором на диплернинг.
![Screenshot203.png](/pr/big/thumb/1373612/15551891891370s.jpg)
С чем это связано?
На VGG16 на проверочных данных рейт растет более отрывисто, но быстрее и более коррелирует с тренировочными данными.
Вот та же самая сеть, fine tuning верхнего слоя Xception, но где изображения на входе меньше шакаляться и batch size побольше.
В целом, я уже наглядно вижу, что оно более плавно, что ли, обучается.
На втором скрине сеть на основе VGG16, итоговый рейт до 70%, но кривая более резкая.
Переобучение же - это когда рейт перестает улучшаться на проверочных данных. Но он улучшается же.
Когда нужно вырубать обучение? С одной стороны, по идее, чем дальше обучение, тем больше сеть начинает хавать некорректных признаков из обучающих данных.
Но при этом у меня на тестовых рейт не падает, сука. Хотя по идее должен начинать в определенный момент.
Хмм, это из кераса?
Прост через генератор изображения рандомятся, скейлятся и нормализуются.
train_datagen = ImageDataGenerator( # Расширяем тренировочные данные.
rescale=1. / 255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest'
)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=target_size,
batch_size=batch_size,
class_mode='categorical'
)
Там для разных предобученных моделей свои способы предобработки. У VGG вроде как переставляются каналы местами (RGB -> BRG) и нет рескейла, только вычитается среднее, у MobileNet нормируются пиксели на [-1, 1].
>>380645
Например, vgg16 его предобрабатывает а-ля caffe, а xception - как tf.
https://github.com/keras-team/keras-applications/tree/master/keras_applications
Просто пиздец, ну почему керас так хуёво документирован?
Нет, при чём тут форма входных данных? Форму оно никак не меняет, оно значения пикселей меняет, а веса в готовых нейронках по этим значениям как раз настраивались.
![plachucshiy-kotechka20158274orig.jpg](/pr/big/thumb/1373612/15552401695860s.jpg)
В смысле? Я нихуя не понял. Объясни плиз, что значит "значения пикселей меняет"?
Анон, хочу пощупать нейрончики, но на моём говно-ноуте это нереально. Посоветуйте какое облако можно взять нищуку, чтобы запускать tensorflow-ы всякие и прочие хипстерские технологии, которые не работают?
А когда разбогатею, откладывая деньги, которые дают на обеды - обязательно куплю норм ПК
Kaggle kernels, бесплатный вообще, работает быстрее, чем моя 1050.
![d75.jpg](/pr/big/thumb/1373612/15552650271730s.jpg)
Был массив batch_size x height x width x channels - станет массив такой же размерности, но со значениями, преобразованными в соответствии с тем, как обучали нейронку на imagenet. Когда обучали VGG, у изображения меняли местами каналы и центрировали каждый канал, соответственно, на это же рассчитаны веса готовой нейронки. Когда обучали другие архитектуры, картинки преобразовывали по-другому, и у них веса рассчитаны на другое. preprocess_input преобразует твоё изображение к тому, что ожидает нейронка.
Мониторь публичные ядра, туда часто высирают топовые сетки.
Правда как-то раз видел сетку из топ 1% по какому-то соревнованию в 30 строк, лол, но обосрался с того, что там тупо около 10 циферок забито уровня
0.004
0.03
32
0.09
Короче хуй пойми откуда взятый набор гиперпараметров.
![14125992593402.jpg](/pr/big/thumb/1373612/15552704750530s.jpg)
>Когда обучали VGG, у изображения меняли местами каналы и центрировали каждый канал, соответственно, на это же рассчитаны веса готовой нейронки. Когда обучали другие архитектуры, картинки преобразовывали по-другому, и у них веса рассчитаны на другое. preprocess_input преобразует твоё изображение к тому, что ожидает нейронка.
Нихуя себе! Спасибо, анон, Это же должно быть пиздец как важно тогда.
Запустил несколько эпох с preprocess_function, сразу заметно, что БЫСТРЕЕ обучается, я в ахуе.
госпаде, почему я узнаю об этом только сейчас, почему этго не было в книжке по керасу (написанной автором кераса блять)
Но для Xception keras.applications.xception.preprocess_input наоборот значительно ухудшает обучение. Что за хуйня?
Если VC расзмерность твоей модели слишком большая и ты выучивашь все данные и обобщение фиговое, то это называется оверфитинг.
![15520534628591.png](/pr/big/thumb/1373612/15553439716170s.jpg)
> Почему работа нейронки отдалённо напоминает то, что видит разогнанный мозг под лсд?
Я ж писал уже. ЛСД это 5ht2a агонист, который растормаживает воздействие таламуса на кору. В нейроночках ваших изначально нет аналогов таламуса. Поэтому они считай постоянно под ЛСД. Тем более, сверточные сети изначально создавались на основе зрительной коры кошки (Нобелевская премия Хьюбела и Визеля)
Какой ты умный, хочу от тебя котана.
Вот только посчитать VC-размерность для всякой диплернинх параши вряд ли возможно, во всяком случае, мозги нужны, одной бороды мало. Поэтому, если что-то не работает, только танцы с бубном.
Если модель запомнила весь датасет и плохо обобщает та валидации и тесте, то она явно слишком сложная и ничего считать не нужно. К тому же при прототипировании есть только два варианта: нарастить сложность или уменьшить ее.
При чем здесь нечеткий петух? В реальности VC размерность не используется для оценки риска модели, все используют k-fold, holdout или LeaveOneOut(с вариациями). На практике все сводится к наращиванию или уменьшению сложности в том числе подбор коэффициента L1/L2/ElasticNet регуляризации, вероятность дропаута, аугментации данных, подбор числа слоев. Само по себе значение VC размерности не столь важно, важно понимание, того, что у глубоких нейронок оно крайне высокое (если случайно перемешать лейблы в ImageNet, то нейронки их заучат c 0 ошибкой).
Что мешает использовать в этой задачи нормальный метод нелинейной одномерной регресси например Natural Cubic splines, и просто подобрать коэффициент регуляризации по сетке?
VC размерность, слесарушка, нужна не для "оценки риска модели" и прочих бизьнесьметрик чтобы потом отчет составить и начальству отрапортовать, а для того чтобы понять имеет ли вообще смысл задача аппроксимации.
>Незнает что такое риск в статистическом обучении, думает, что кому-то интересно сколько точек в данном пространстве может выучить рассматриваемая модель. Считает себя д'артаньяном.
Ты точно уроки на завтра сделал?
>кому-то интересно сколько точек в данном пространстве может выучить рассматриваемая модель
Кто-то тут явно ничего не выучил.
Вряд ли нечеткий петух где-то учится.
>Что мешает использовать в этой задачи нормальный метод нелинейной одномерной регресси например Natural Cubic splines, и просто подобрать коэффициент регуляризации по сетке?
Возможности микроконтроллера мозгов, судя по всему.
Вообще, автор пасты какой-то пахом.
Нашел оригинал на drive2 (юзер emmibox, он же, как я понел, Maxi RPD c турбобазара), там этот упорок:
1) Ищет СПГС в последнем клипе рамштайна.
2) Дрочит на немецкий автопром и хейтит рисовозки
3) В своей тюненх-конторе настраивает ведра на сраном 5 январе
4) В своей прошивке для этого самого января, как я понел, напиздил чужого кода, соединил его в хекс-редакторе и продает мозги из конца 90х
5) Кидает через хуй своих клиентов (на том же драйве нашел кучу жалоб что этот хуй с непомерным чсв криво настраивает моторы, посылает нахуй с техподдержкой своего говна и вообще долбоеб)
Короче, типичный нечеткий петушок (возможно, кстати, это он и есть, диванон, ололо, уже не первый тредик семенит с этой пастой и сам с собой разговаривает).
Но вот за
Nelles Oliver: Nonlinear System Identification: From Classical Approach to Neural Networks and Fuzzy Models. Springer, Berlin
и
Isermann R. Engine Modeling and Control: Modeling and Electronic Management of Internal Combustion Engines
ему, конечно, респект, интересная хуита.
>Что мешает использовать в этой задачи нормальный метод нелинейной одномерной регресси например Natural Cubic splines, и просто подобрать коэффициент регуляризации по сетке?
Возможности микроконтроллера мозгов, судя по всему.
Вообще, автор пасты какой-то пахом.
Нашел оригинал на drive2 (юзер emmibox, он же, как я понел, Maxi RPD c турбобазара), там этот упорок:
1) Ищет СПГС в последнем клипе рамштайна.
2) Дрочит на немецкий автопром и хейтит рисовозки
3) В своей тюненх-конторе настраивает ведра на сраном 5 январе
4) В своей прошивке для этого самого января, как я понел, напиздил чужого кода, соединил его в хекс-редакторе и продает мозги из конца 90х
5) Кидает через хуй своих клиентов (на том же драйве нашел кучу жалоб что этот хуй с непомерным чсв криво настраивает моторы, посылает нахуй с техподдержкой своего говна и вообще долбоеб)
Короче, типичный нечеткий петушок (возможно, кстати, это он и есть, диванон, ололо, уже не первый тредик семенит с этой пастой и сам с собой разговаривает).
Но вот за
Nelles Oliver: Nonlinear System Identification: From Classical Approach to Neural Networks and Fuzzy Models. Springer, Berlin
и
Isermann R. Engine Modeling and Control: Modeling and Electronic Management of Internal Combustion Engines
ему, конечно, респект, интересная хуита.
https://habr.com/ru/company/edison/blog/432334/
Суть VC-теории в теореме о росте. Дело не в определениях про "количество точек" а в том как растёт размерность с увеличением выборки. Бесконечная vc-размерность означает что в задаче аппроксимации не больше смысла чем в предсказании случайного шума.
>растет VC размерность с увеличением выборки
Размерность не растет с увеличением выборки, она от нее вообще не зависит, функция роста выборки зависит. Вероятность переобучения стремиться до нуля с увеличением выборки, для моделей с конечной VC размерностью - вот суть VC теории. А ты даже определений не знаешь.
Правильно я понимаю, что для серьезных задач используют только ансамблевые методы и нейронки?
Что оба могут дать сопоставимую точность.
Что нейронки могут все, просто устроены на уровне нейрона, не используют классические алгоритмы обучения, работают как черный ящик и требуют ОЧЕ много вычислительных ресурсов для обучения, соответственно обучаются очень долго.
В то же время ансамлевые методы используют классическое обучение, сложно устроены, обучаются на порядки быстрее, чем нейронки, но проектировать их дохуя сложно.
Хочу делать машоб для управления роботами: навигация в пространстве, манипуляция физическими предметами etc.
В идеале я хочу шарить во всем: классические алгоритмы, ансамбли, deep learning. Но может на практике что-то из этого не используется (или не используется конкретно в интересной мне сфере) и соответственно учить не имеет смысла?
Есть чёнить чтоб совсем не ебаться? Ну там GUI чтоб указать ему что ему скормить и что ему выдать, нажал на кнопочку и обучил?
>Правильно я понимаю, что для серьезных задач используют только ансамблевые методы и нейронки?
нет
>Что нейронки могут все
нет
>не используют классические алгоритмы обучения
нет
>работают как черный ящик
не совсем
>требуют ОЧЕ много вычислительных ресурсов для обучения
не совсем
>соответственно обучаются очень долго.
не совсем
>ансамлевые методы используют классическое обучение
ты про что вообще? https://dyakonov.org/2019/04/19/ансамбли-в-машинном-обучении
>обучаются на порядки быстрее
нет (по секрету, можно сделать ансамбль из нейронок)
>но проектировать их дохуя сложно
нет
Ансамбль — просто несколько нейронок/алгоритмов, объединенных вместе.
Почитай бишопа или ESL, разберись в основных алгоритмах. Прочитай про нейронки (необязательно).
![cfnn.jpg](/pr/big/thumb/1373612/15558612065140s.jpg)
Подскажите, пожалуйста, как с помощью Keras сделать такую же CFNN как на картинке?
Поищи репы с реализацией DenseNet на керасе, похоже на этот твой CFNM
Не то, чтобы очень сложная, процентов 80 довольно легко понять. А досконально теорию нужно знать только для того, чтобы пройти собес в Яндекс. Почти все вкатывальщики делают упор на ПРАКТИКУ и ПЕТ ПРОЕКТЫ (fit-predict + симпатичный EDA). Так что не считай себя дураком анончик :3
Concatenate + Dense же, нет? Ну или свой слой писать, если размеры разные.
Потому что ты не понимаешь что такое нейроночки
Примерно так:
i1 = Input(...)
i2 = Input(...)
l1_input = Concatenate(...)([i1 i2])
l1 = Dense(...)(i1_input)
l2_input = Concatenate(...)([i1 i2 l1])
l2 = Dense(...)(l2_input)
l3_input = Concatenate(...)([i1 i2 l1 l2])
l3 = Dense(...)(l3_input)
Keras в плане рисования любых графов достаточно прост - конструктор создает веса, которые могут быть переиспользованы, а вызов функции уже конкретный слой.
> досконально теорию нужно знать только для того, чтобы пройти собес в Яндекс.
Зачем этой офшорной рекламной параше вообще нужны такие специалисты? Это же чистые понты уровня поиска уборщицы с вышкой по математике, пхд и знанием хаскеля. Кроме рекламы и ухода от налогов в рашке они чем-нибудь вообще занимаются? У них гитхаб беднее чем у любого среднего индуса. Полтора враппера и ещё какая-либо хуета без задач.
>Кроме рекламы и ухода от налогов в рашке они чем-нибудь вообще занимаются?
курсы для вкатывальщиков продают
![5efa13a2e5744a66a924206792e9e470.jpg](/pr/big/thumb/1373612/15563794640400s.jpg)
Если планируешь обучать на GPU, то проще вторую ось поставить, чем ебаться с пробросом видеокарты.
Сколько времени ушло на прочтение этих книг?
на 1066/1070 можно вполне комфортно обучать сетки, вообще сильно зависит от задачи
>1066/1070
Увы, у меня 1063. Я брал ее в декабре для других целей, там количество видеопамяти было не критично, ну и плюс экономия.
Спасибо, я так и думал.
Скорочтение наверное дочитывает
хотя лично мне больше нравится PIL
Гугли imgaug
Для обучения на mnist мощностей цпу хватит, а этой видеокарты тем более.
Я кстати слышал, что на колабовском gpu сетки быстрее обучаются, чем на 1066
Снимают людей на выблядка и отправляют использованные ими наборы данных в цру, анб, госдеп сша и моссад.
И помимо снятия людей на выблядка, они в калаб отдают чуть старое оборудование, а сами они перешли на более новое и классное.
Алекстайм возмущался, что женщина снимает его на выблядка, думая что в ее ребенке встроена камера для слежки за ним.
Морир мерда и подохните, твари.
Задача:
1. Парсить папку с кучей видео
2. В одном видео может быть несколько людей
3. Один и тот же человек может быть в разных видео
4. На выходе я должен получать список "человек - видеофайл1;видеофайлХ;".
5. Предварительного сета лиц для обучения нет.
Как это лучше сделать?
Пока у меня получается следующее:
1. Нет ни одного лица в сете
1.1. Обучаем модель распознавания на двух чёрных квадратах
2. Берём кадр1 видео1 ищем лица.
2.1. Пытаемся распознать лицо - получаем слишком большую дистанцию
2.2. Всё ок, мы знаем что у нас в модели только чёрные квадраты, поэтому создаём новую персону (персона1) и апдейтим модель распознавания.
2.3. Берём кадр2 видео1 ищем лица.
2.4. Пытаемся распознать лицо - получаем нормальную дистанцию с персона1 и апдейтим модель. Теперь персона1 имеет 2 фотки и распознаётся лучше.
2.5. Начинаются проблемы. В кадр3 видео1 у нас может внезапно поменяться ракурс лица и оно хоть и распознается как персона1, но дистанция получится относительно большой или у нас может появиться персона2 ещё не внесённая в модель распознавания, но она распознается как персона1 с относительно большой дистанцией. Как обойти этот случай? Как понять - это персона1 с другим ракурсом/освещением или персона2?
3. Но ок, допустим в видео1 у нас только персона1. Открываем видео2. Там может быть как персона1, так и персона2. Но у персоны1 будет новый ракурс\освещение. Как результат мы с примерно одинаковой дистанцией распознаем человека и или будем считать что персона2 = персона1 или что персона1видео1 != персона1видео2.
Как всё это правильно сделать|что почитать?
дело не то в быстрее/не быстрее, но в том, что у тебя комп в комнате не будет шуметь + компом можно будет пользоваться и тупо выключать если надо + можно настроить оповещение в телегу по завершению обучения, у colab плюсов много
opencv + object tracking и хранить все дескрипторы лиц и после сравнивать их (разумеется перед этим обработать их)
мимо нубас
![14250321182073406018.jpg](/pr/big/thumb/1373612/15566152133480s.jpg)
Давай базу где скочать
Предвкушаю мутантов в результате
Попробовал встроенный object tracking, работает как земля. Придётся видимо по крайней мере по началу сортировать руками.
В Яндекс Еду собирался устраиваться?
>очень сложная область
Про петухов это о тебе? ЖС легче, там нельзя обойтись вызовом двух-трёх абстракций от Гугла.
>не мочь написать бэкпропагатор на крестах и не знать, как посчитать производные от элементарных функций
Сначала докажи что сам можешь, а потом уже кукарекай. Это нихуя не просто.
Осталось придумать, нахуя это делать. Современные системы настолько же далеки от ручного вычисления производных примерно как студенческий интерпретатор лиспа далек от gcc.
И если ты не понимаешь, что питон используется только как язык описания графов, а все выполняется на видюхах после компиляции, то просто заткнись и съеби из треда, пафоса у тебя больно дохуя, при том, что ты полный ноль в теме.
Пойдёт. Анна выше не слушай. Книжечки лучше, быстрее начнёшь разбираться и не будет пробелов.
![1556647672402.png](/pr/big/thumb/1373612/15566480761440s.jpg)
> В некоторохых подходах к обратному распространению берутся граф вычислений и множество числовых значений, подаваемых на вход графа, а возвращается множество числовых значений, равных градиентам во входных точках. Такой подход мы называем символьно-числовым дифференцированием. Он реализован в библиотеках Torch (Collobert et al., 2011b) и Caffe (Jia, 2013).
> Другой подход – взять граф вычислений и добавить в него дополнительные вершины, содержащие символьное описание требуемых производных. Он используется в библиотеках Theano (Bergstra et al., 2010; Bastien et al., 2012) и TensorFlow (Abadi et al., 2015).
Да, только коннект вроде обрывается через 2 часа
А че не из 1998 цитаты притащили? Ты думаешь год тебе просто так написали?
Нахуя изобретать велосипед если это уже сделано овердохуя раз?
Кончай себя закапывать уже
> Верить в то, что питон или джава медленнее крестов
Вот и выросло поколение, учившее программирование по мемам
Так жаба ведь и правда медленее. Даже пщ быстрее жабы.
Подскажите, пожалуйста, как доказать, что нейросеть лучше, чем SVR и Gradient boosting?
Могу ли я применить SVR и Gradient boosting из примеров scikit-learn на своем наборе данных, получив точность 94%? А затем взять keras и нахреначить огромную нейросеть с кучей нейронов, выжать точность 98% и потом заявить, что нейросеть очень точная? АЖ НА 4 ПРОЦЕНТА! И поэтому она лучше! Можно так сделать? Или это неправильно и не по понятиям?
Один перцептрон и есть линейная регрессия. Каким способом керас высчитывал ошибку? Методом наименьших квадратов?
![15366506988230.png](/pr/big/thumb/1373612/15566981539660s.jpg)
Gradient boosting is a machine learning technique for regression and classification problems, which produces a prediction model in the form of an ensemble of weak prediction models, typically decision trees. It builds the model in a stage-wise fashion like other boosting methods do, and it generalizes them by allowing optimization of an arbitrary differentiable loss function.
Gradient boosting can be used in the field of learning to rank. The commercial web search engines Yahoo[13] and Yandex[14] use variants of gradient boosting in their machine-learned ranking engines.
сколько ещё профессий они убьют прежде чем дойдет до программистов?
https://2ch.hk/news/res/5056490.html (
![](img/mob.gif)
Судя по твоим словам, подозреваю, что у тебя ебический оверфит и на самом деле нихуя не работает, и об этом преподы и спрашивают.
>Один перцептрон и есть линейная регрессия
Там, вроде, нелинейная регрессия, multiple linear regression дает 0,74 эр квадрат, но зато нейросеть, gradient boosting и SVR дают 0,94-0,98.
Спасибо за пост с упоминанием линейной регрессии, значит я лоханулся, и мне надо выпилить слово "зависимость" и выпилить обозначение у=f(x1,...,x14), а то можно подумать, что там функция и линейная зависимость. Это просто я написал неправильно, пытаясь передать смысл.
>Каким способом керас высчитывал ошибку? Методом наименьших квадратов?
Да, так
>>392445
Благодарю, так и хочу сделать, но выходит, что я не по понятиям поступлю, если мне надо выгородить нейросеть, то я должен сделать вид, что она чуть-чуть точнее. И я не знаю, можно так или это слишком толсто - без разбора применить SVR, gradient boosting, скопипастив примеры из интернета, получить 0,94 эр квадрат, а над нейросетью усираться, подбирай параметры и количество слоев и нейронов, чтобы сделать 0,98 и сказать СЕТЬ-ТО ТОЧНЕЕ ОЛОЛОЛО!
>>392632
Да, вроде, нет. Тестовые данные же не участвуют в обучении. Преподы спрашивают у меня - зачем нейросеть, если есть методы машинного обучения, которые предназначены для восстановления регрессии. А я не могу ответить, потому что лоханулся с заданием и мне его уже оформили как "нейронная сеть" и поздно метаться. И теперь выходит, что я должен каким-то образом высосать из пальца причину почему нейросеть лучше SVR и gradient boosting'a
r2_score прогнозов по тестовым данным и соответствующих правильных ответов
>я должен сделать вид, что она чуть-чуть точнее
ну вообще нейросеть должна быть точнее
>над нейросетью усираться, подбирай параметры и количество слоев и нейронов
это нормально, все так делают
Ну блэд, это наука. Если данные не подходят под твою концепцию, значит тем хуже для данных.
Делаешь фактическое сравнение методов. Если какой-то метод лучше нейросети, меняешь датасет так чтобы он был хуже нейросети.
![Screenshot6.png](/pr/big/thumb/1373612/15567883244100s.jpg)
Обучаю очень здоровую сеть на достаточно малом наборе данных 10к образцов, без регуляризации.
Я верно понял, что сеть тупо запоминает всю обучающую выборку и не вычленяет действительно полезные признаки из нее?
Котов от собак отличить
200 классов, готовый resnet50 с полностью замороженой основой, обучается только полносвязный слой.
Мне непонятно одно, какого хуя это поделие вообще не обучается.
Ладно бы там рейт низкий был, я бы все понял, но такое ощущение, что обучение вообще не идет.
Vgg с 10кк тренируемых параметров нормально обучалась без переобучения, тут 2 ляма параметров - переобучение.
Не должно так быть
Дропаут попробуй вставить.
Можно применить глобальный пулинг к карте признаков (в керасе при импорте прямо можно указать).
Опять же предобработка изображений (preprocess_input).
Не птицы часом?
Возможно, перескакивает минимум функции потерь. Попробуй поиграться с моментумом оптимизатора, понизить lr.
Если бы он минимум функции потерь перескакивал, у него бы на обучении хуйня творилась, не?
>Дропаут попробуй вставить.
А толку? Будет действовать только на полносвязный слой.
К тому же, есть аугментация изображений.
>preprocess_input
Стоит keras.applications.resnet50.preprocess_input.
> глобальный пулинг к карте признаков
Стоит model.add(layers.GlobalAveragePooling2D()), это оно?
>
> К тому же, есть аугментация изображений.
Проверь, что она корректно работает. А то может все изображения там ломаешь, вот с нормальными оно и не работает потом
>Будет действовать только на полносвязный слой
Так ты же только его и обучаешь, разве нет? Или что значит "с полностью замороженной основой"?
Работает корректно, гонял уже с другими сетками, где все норм.
Да, только его и обучаю.
Ну, я прост думаю, что раз сеть запоминает всю обучающую выборку, то дропауты на полносвязном слое уже не помогут.
Если бы там были дропауты между conv-слоями, то был бы толк.
Если у тебя нижние слои фиксированы, то они, очевидно, ничего не "запоминают" (что за корявое слово, выборку разве что методы ближайших соседей запоминают и методы, использующие ядра), это некоторое константное преобразование входа, всё переобучение происходит на полносвязном слое.
![1395493136311.jpg](/pr/big/thumb/1373612/15568080203670s.jpg)
>Если у тебя нижние слои фиксированы, то они, очевидно, ничего не "запоминают"
Блять, действительно, какой же я даун.
Меняется только сверточная основа.
Почему vgg16 обучается, а resnet50, xception и inception нет?
Может, из-за размерности карты признаков? У vgg16 на выходе 512 фильтров, т.е. карта признаков для входного изображения 224 x 224 будет 7 x 7 x 512, при применении global average pooling - просто 512. Не знаю, что у других, но наверняка больше.
У resnet 2048.
Чет мне не кажется, что дело в этом.
Может в preprocess_funciton?
Использую стандартные для каждой сетки.
Не знаю. Хотя, кстати, у меня есть подозрение, что preprocess_input - это in place функции, т.е. они ещё и аргумент меняют.
Да!
2 новости, хорошая и плохая:
1. Я, кажется, нашел в чем была проблема. Таки в препроцессинге.
2. Я настолько тупой, что понял это только сейчас, а остальные 200 экспериментов провел некорректно.
Вот на втором пике закомментированная строка раньше была раскомментирована.
Я создал эти генераторы еще давно, когда только начинал тыкать нейросети. В книжке был пример, там вручную делался препроцессинг для обучаемой с нуля сетки.
А я и preprocess_function использовал и рескейл пикселей изображения. Вот из этого и выходила хуйня.
Еще один вывод. Предыдущие сети (на основе vgg16) обучались даже несмотря на хуевый препроцессинг.
Это возможно по двум причинам:
1. Этот итоговый препроцессинг подходил vgg16 и был близок к ее нормальному препроцессингу.
2. Если достаточно долго обучать сеть, особенно дообучать верхние слои, то постепенно она пристроится к твоему препроцессингу (хотя, конечно, это полная хуйня, так делать не надо)
Нашел только на 1 пике и то 3/5
>Если достаточно долго обучать сеть, особенно дообучать верхние слои, то постепенно она пристроится к твоему препроцессингу
Это как бы очевидно.
Ну тип лица подменяет
Это же считай оружие в информационной войне. Серия грамотных вбросов может спровоцировать все что угодно от пынягейта / хуйзнаетчегогейта до реальной ядерной войны. Маск говорил, что ИИ может такую хуйню организовать. Но на это же способны террористические организации, нанявшие хакеров. И все, пиздарики человечеству или как минимум отдельным странам.
![1271678657738s.jpg](/pr/big/thumb/1373612/15569825948290s.jpg)
И что не так? Маск Небоходец святой.
![ZoUYFVxv1YU.jpg](/pr/big/thumb/1373612/15569896605390s.jpg)
Задача: есть монеты на фото. Нужно определить их количество.
Куда копать? Есть готовые решения?
Не актуально
Конечно. U-Net это и делает.
Какой оптимизатор ставить, какой learning rate, моментум и другие гиперпараметры?
В книжке, что я читал, об этом тактично умалчивается, говорят лишь: "Ну это молодая область, хуй знает короче, в целом, большинство использует метод квадратно-гнездового тыкинга".
Но это хуйня же. Наверняка есть способы
![14196232147433.jpg](/pr/big/thumb/1373612/15569963069330s.jpg)
Причем логика вообще какая-то ебанутая.
VGG16 - почти топ, лол, хотя это очень старая и простая по нынешним меркам есть.
Получше Xception.
Inseption и Resnet показывают результаты хуже чем vgg.
Щас для лулзов запустил MobileNet - еще лучше vgg оказалась.
Чем больше параметров, тем больший датасет нужен
Ставь по умолчанию и не выёбывайся, потом, если будет желание, можешь с ними поковыряться ради сотых долей процента.
Grid search, random search, последовательно перебор, байесова оптимизация вот методы, которые используют на практике. Ну и LR динамически нужно уменьшать.
Используются они только в классическом ml, в DL слишком долго и дорого, там с гиперпараметрами почти не играются в реальных задачах
LR предпочтительнее уменьшать на плато. С числом нейронов и архитектурой почти всегда играются, аугментации подбирают, коэффициенты дропаута и l2 регуляризации подбирают. Так что используется.
Я тупо оптимизатор поменял и это +5% дало
> Как оптимизировать гиперпараметры?
Байесова оптимизация решает. Буквально вот эта поебота https://github.com/fmfn/BayesianOptimization берется как черный ящик и вперед
>Какой оптимизатор ставить
адам
>какой learning rate
1-e4
>Но это хуйня же. Наверняка есть способы
Способы итеративные. Сначала, когда не знаешь, обучается оно или нет, используешь консервативные стратегии: lr поменьше, можно тупой как валенок SGD, и добиваешься постоянного убывания лосса. Дальше ты видишь, что лосс убывает, но как-то медленно, бесконечно медленно, неделю нужно ждать, врубаешь adam и заставляешь эту хуйню работать. Дальше понимаешь, что в конце концов обучение упирается во что-то и тебя этот уровень не устраивает, пробуешь разного рода стратегии переменного lr. Лично я юзаю шаманство отсюда https://www.fast.ai/2018/04/30/dawnbench-fastai/ , и получаю ровно то, что там пишут, обучение на порядок быстрее.
Но вообще правило такое, что если SGD с медленным lr не обучается (даже гипермедленно), играться особого толку нет, надо чинить архитектуру.
>Лично я юзаю шаманство отсюда https://www.fast.ai/2018/04/30/dawnbench-fastai/
One cycle policy? Слышал про него, в ближайших планах попробовать.
Пока тупо юзаю уменьшение LR на плато, помогает повысить точность процентов на 5-7.
Еще, не знаю почему, но замена adam на простой SGD дала еще +5%.
Нужна модель с несколькими входами.
Для обработки текста используются свои архитектуры.
Можно сделать именно несколько входов, они будут обучаться совместно, а можно тупо ансамбль сделать, вынеся обработку текста в отдельную сеть, но это будет менее эффективно, ибо по сути, текстовая сеть будет обучаться в отрыве от остальной.
нубас
Спасибо. Видимо, мне этим ещё рановато заниматься.
![1394401295674.jpg](/pr/big/thumb/1373612/15570647009000s.jpg)
Это когда точность перестает улучшаться на валидационных данных. Да?
Или когда точность на валидационных данных начинает падать по отношению к точности на тренировочных?
Так вот, второй пункт у меня вообще всегда наблюдается. Всегда в итоге сеть на тренировочных данных уходит в 99%, а на проверочных - уж как пойдет.
Но есть ли однокнопочные программы, в которой я указываю путь до своего пака с Чёрным Властелином, сеточка обучается, делает магию и начинает выдавать мне новых Чёрных властелинов?
Как я понимаю, это классификаторы, которые будут мне говорить, насколько процентов этот Фотошоп похож на ЧВ. А я бы хотел генератор, по типу дипдреамс, который мне хоть на рандомный шум нарисует Чёрного Властелина во всей его красе, которым не стыдно вайпать неугодный тред.
>Однокнопочных програм нет, а теперь уебывай обратно в другой топик программача
Спасибо за информацию.
![1557087807337.jpeg](/pr/big/thumb/1373612/15570878855730s.jpg)
Положняк:
Top tries: Keras API with TF/Torch backend
Mid trier: ю plain TF, plain Torch
Shit trier: - Deeplearning4j, Caffe, Theano, MXNet, Matlab
Ultra shit trier: визуальное конструирование сетей мышкой в браузере (azure machine learning и прочее), ненужные надстройки над существующими фреймворками (в том числе Fast.ai), starter pack'и, шаблоны "для любой задачи" и прочие васяноподелки с гитхаба
![kitten icecream.jpg](/pr/big/thumb/1373612/15570880549730s.jpg)
Почему в keras'е нет встроенного ony cycle policy как в fatai, а есть только васяноподелка на гитхабе?
Потому что Keras - это стандарт API для библиотеки машинного обучения, который реалищуют и другие библиотеки. Туда не нужно тащить каждую модную штуку из свежей публикации. Пройдёт время и станет ясно, что какая-то штука точно необходимая и без неё никак нельзя - добавят. Менять же стандарт каждый месяц - получишь совсем адский ад, примерно как в мире js и веб-макакинга, где каждый месяц проекты на новую модную библиотеку переписыают.
> ony cycle policy
Есть в keras-contrib, он для этого и существует как инкубатор.
А как же PyTorch, chainer, cntk и прочее?
GAN это оче тёмное колдунство, которое работает через раз, так что вряд ли ты что-то такое найдёшь
Керас для казуалов. Тру пишут графы в тензорфлоу.
Что ты как маленький
for batch in range(number_of_batches):
K.set_value(generator.optimizer.lr, lr)
generator.train_on_batch(....)
Две строчки всего, а столько нытья
Ващет там все несколько сложнее
![1.png](/pr/big/thumb/1373612/15572663757740s.jpg)
Ребят, читаю того же Николенко и параллельно Гудфеллоу и застрял на математическом введении. Пытался проскакать галопом по статистике и линейной алгебре по спецучебникам, но делу это не особо помогло.
Стоит ли полгодика подрочить математику для понимания вещей? Или в вопросе можно разобраться и без этого бэкграунда? Просто такие темы, как тензорное исчисление, векторный анализ, серьезный теорвер и теория инфы — это не хуй собачий.
Я студентота второго семестра, биоинформатик. Зачем я в это хочу вникнуть? Просто любопытно, как эта хуита работает и с чем ее едят.
Там не так много математики, если ты не исследованиями планируешь заниматься. Линейная алгебра, основые дискретные и непрерывные распределения из матстата, баесовский вывод, численные методы и оптимизация, свойства функций из матана. Все пожалуй.
Да, в nlp постоянно. Но скоро будут заменены глубокими e2e
Этот хорошо разжевал.
https://youtu.be/adsSwIcvfD0
Вторая его лекция тоже норм. Третья резко стала сложной.
Никак, в этой сфере желающих вкатится дохуя, а вакансий не требующих реального опыта почти что нет.
>Линейная алгебра, основые дискретные и непрерывные распределения из матстата, баесовский вывод, численные методы и оптимизация, свойства функций из матана
Потому удивляются, что это говно не работает.
Через постель
>Устраиваешься в какой-нибудь сбербанк
Ух, вот ещё мне этих бюрократии, дресскода и жёсткого графика с 8 до 5 не хвататло.
Блядь, какой же ты тупой. Хули толку от того что ты работаешь в ойти, если спрашиваешь про ML. Единственный более-менее не расчитанный на везение вариант - устроиться в фирму с ML и далее потихоньку горизонтально перебраться. Ты много знаешь контор, где есть дефицит ML специалистов? Я - нет.
Что касается меня, у меня в резюме уже несколько ML проектов и проблем с трудоустройством нет.
И ещё, чисто из любопытства. А есть ли классификаторы, определяющие по музыке её жанр?
Обычно STFT спектрограмму смотрят, в распознавании речи фичи пофичастее используют. А генераторы узоров это как правило спектроанализатор подключенный к рисовалке красивостей, никакого ML.
Классификаторы на гитхабе посмотри, по мне классификация звуков это самая скучная задача, не стоящая времени
>Блядь, какой же ты тупой.
Нет, ты.
> устроиться в фирму с ML и далее потихоньку горизонтально перебраться
Спасибо, капитан. Так и делаю, но на это нужно время.
Я уж думал что побыстрее есть.
Раз ты Ыксперт, расскажи, пожалуйста, какие есть проекты, есть ли там что общее или в каждом будет упор на что-то своё?
И что насчёт карьерных перспектив с твоей точки зрения?
ыыыыыыыыыыыы
Ок, спасибо.
>никакого ML.
Да я в курсе, но мне показалось, МЛщики должны знать про извлечение признаков из аудио. Кстати рисовалки красивостей как устроены?
>Классификаторы на гитхабе посмотри
Даже не знаю, что там в поиск забивать.
> по мне классификация звуков это самая скучная задача, не стоящая времени
Почему? Делаешь кроссвалидацию и подгоняешь гиперпараметры, как и весь остальной МЛ.
Россия - родина слонов
А ты думал ИИ это технологии 2019 года?
Скоро тебя зохавают.
CNN + Backprop - это определенный прогресс по сравнению с персептрон+правила хеба
Потому что градиент при большом батче ближе к "настоящему" градиенту, очевидно же.
Ты ща допиздишься до того, что BFGS лучше чем SGD
Это что, неявное переобучение на валидационных данных?
Пока я дрочил архитектуры и гиперпараметры, сеть таким образом получила слишком много информации из валидационных данных?
Да может быть и такое, плюс проверь какие у тебя данные на тесте, возможно они из другого распределения
Пока нейроночки обучаются, го в жопы няшится!
Я тебе дал, но ты сказал, что тебе мало. Если тебе и этого мало - ты очень тупой и тебе рано в deep learning. Впрочем, ты правда тупой, если до сих пор просишь.
max_lr = 2e-3#величина подбирается под сетку плавным ростом lr до максимальной величины
min_lr = max_lr/4
lrs = np.interp(range(200000), [0, 50, 100], [min_lr, max_lr, min_lr], period=100)#у меня пила с шагом 100 вместо one cycle policy, но можно нарисовать любую кривую lr
lrIdx = 0
for epoch in range(number_of_epochs):
....for batch in range(number_of_batches):
........K.set_value(setochka.optimizer.lr, lrs[lrIdx])
........lrIdx = lrIdx + 1
........setochka.train_on_batch(..., ....)
....#здесь можно повалидировать
Вот и все.
Спасибо, но как я и писал, там все несколько сложнее.
Меняется не только lr, но и моментум + weights decay.
Плюс изначальные параметры подбираются не отпизды, а другими простыми алгоритмами.
Плюс в конце lr затухает полностью, что с другими параметрами уже не помню.
Вот я и ищу уже готовую реализацию этой хуйни как в фаст.аи.
>Меняется не только lr, но и моментум + weights decay.
Это 4 строчки к моему коду. В частости заменить Adam на AdamW, который есть на гитхабе для keras
>Плюс изначальные параметры подбираются не отпизды, а другими простыми алгоритмами.
Ага, что написано в моем комменте.
>Плюс в конце lr затухает полностью, что с другими параметрами уже не помню.
Если ты думаешь, что подобный ахалай-махалай обязательно заработает на твоей сетке, то нет. Я, например не просто так моменты не трогаю, а потому что мне это не нужно. Я и от AdamW отказался
>Вот я и ищу уже готовую реализацию этой хуйни как в фаст.аи.
Да ты просто похоже поверил в мемасики про import slesarplow и уверен, что на все должен быть подобный скрипт. Проблема в том, что если ты подобные простейшие вещи не можешь сделать, как ты исследовать будешь? Одно дело найти на гитхабе реализацию ради экономии времени. А другое дело ныть неделю будучи неспособным написать 10 строчек кода школьного уровня. Пиздец какой-то.
Адаптивным или стохастическим?
![15402964055100.jpg](/pr/big/thumb/1373612/15575554453090s.jpg)
Файндфейс теперь с ментами работает.
Привет, шизик
А подкрепление совсем не развивается?
![Screenshot20.png](/pr/big/thumb/1373612/15575759373770s.jpg)
Это что, инстансы без видеокарты?
>по мне классификация звуков это самая скучная задача
Да ну, по-моему ничего интереснее временных рядов в машобе нет. Ну и рл, но это другая опера.
Да, но ничего скучнее классификации нет.
Перцепирон не может в xor
Полносвязный слой (перцептрон) может эмулировать работу любого другого слоя.
Всякие специализированные слои - лишь урезанные версии перцептрона.
Таким образом, любая современная сеть - это несколько перцептронов.
Это всё понятно, вопрос же - почему некоторые задачи удалось решить только наращиванием специальных слоёв.
Удачный выбор эвристики слоев - свертки и пулинги, которые были навеяны нейробиологическими исследованиями.
Потому что один слой может решать только линейно разделимые задачи. Пиздуй читать cs231n
Одному слою можно поставить нелинейную функцию активации и он будет решать не линейные разделения.
Не будет. Функция активации просто растягиевает-сжимает пространство вдоль осей после применения преобразования пространства матрицей. Ключевой момент тут - после, а не до. То есть, если у тебя есть допустим функция
y=f(W x + b)
И ты считаешь, что y>0 это один класс, а y<0 - это другой. Но тогда
f(W x + b) > 0 это то же самое что
W x + b > f^-1(0)
То есть ты применяешь функцию, обратную функции активации, к нулевому вектору (получишь либо вектор из нулей, либо вектор из 0.5 - короче какую-то константу) и дальше получаешь линейный класстификтор W x + b
Вот когда у тебя два слоя, все становится веслее, так как после применения функции активации ты скармливаешь следующему линейному слою уже нелинейно искаженное постранство.
блять сложно сука, машоб это - import keras as np, а у тебя сатанистская хуйня какая-то
>f(W x + b) > 0 это то же самое что
>W x + b > f^-1(0)
Это, во-первых, бессмыслица, во-вторых даже в одномерном случае верно только для монотонной f.
Для других задач функция активации тебе даст немного больше свободы и формально нейронка будет нелинейной (то есть f(x+y) != f(x)+f(y) ), но в целом из-за того, что она применяется поэлементно, особой выразительности в этом не будет.
А когда функция активации применяется не поэлементно, то ты и получаешь многослойную нейронку. Каждый слой это такая ебическая функция активации для предыдущего слоя.
Вот тут много картинок http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/ , они не совсем по этой теме, но дают аппарат для воображения понимать как именно что работает
Один скрытый слой - это два слоя, скрытый и выходной, и случай не f(W x + b) , а W1 f(W0 x + b0) + b1 и на этом действительно можно построить нелинейный классификатор. Только за такое и в ебасос получить можно.
Погоди, так перцептроном вроде и называют сеть с одним скрытым слоем минимум. Вопрос то про него и был, без скрытых слоёв это просто логистическая регрессия.
Смог заставить выполняться сеть в ебаном докере на сервере.
Последние версии tensorflow не будут работать с виртуальным процессором. Tensorflow также в принципе не работает с питоном 3.7, макс 3.6.
> Tensorflow также в принципе не работает с питоном 3.7,
Всё отлично работает. И в актуальной стабильной и в альфе 2.0
Ок, тогда правильный ответ про ебасос.
>>398671
Представь себе табличку с колонками вида x1 x2 x3 x4 y. Дальше ты пишешь код в котором интерполируешь хуйней типа nearest neighbor:
yoba(табличка, x) {
x' <- ближайший x в табличке
return табличка[x']
}
Вот с помощью такой таблички можно аппроксимировать функцию с любой точностью, если табличка будет достаточно большой. А значит ты можешь с помоьщю такой табличке проаппроксимировать даже тысячеслойный resnet. Делов-то берешь все возможные варианты картинок 255х255х3, то, что resnet выводит на каждую картинку, и все заебись.
Вот однослойный персептрон, с помощью которого можно аппроксимировать любую функцию, недалеко от такой таблички ушел. Да, в теории с его помощью можно аппроксимировать любую функцию (а значит любая глубокая нейронка может быть представлена в виде однослойного аналога с тем же количеством входов и выходов). Но на практике он будет, во-первых, очень широким. Экспоненциально широким. Возможно даже не влезет в размеры вселенной.
Во-вторых, в ML нас интересует не сама результирующая функция, которая бы тупо равнялась каким-то конкретным значениям в узловых точках, а ее поиск, чтобы он не просто протабулировал твой трейнинг сет, а чтобы он еще и правильно работал на валидейшене. Для этого либо его структура должна быть такой, чтобы закладывались какие-то инварианты, либо твой алгоритм обучения должен эти инварианты накладывать. А у однослойного перспектрона нихуя инвариантов нет. Все влияет на все.
>Вот однослойный персептрон, с помощью которого можно аппроксимировать любую функцию, недалеко от такой таблички ушел.
Ну то что однослойный перцептрон только теоретически разделяет множества это понятно. Вопрос же был по какой фундаментальной причине именно стаканье слоёв помогает. Если не ограничиваться только задачами с конкретными архитектурами, связанными просто с природой самого датасета, как например сверточные сети для распознавания изображений.
>Экспоненциально широким. Возможно даже не влезет в размеры вселенной.
Да не, достаточно взять слой из N+1 нейрона для N нейронов на входе. С математической точки зрения.
> по какой фундаментальной причине именно стаканье слоёв помогает.
Там не простые слои. Обычный перцептрон с десятками слоёв будет просто все усреднять и нихуя им не аппроксимируешь. А в этом вашем ЛГБТ диплернинхе стыкуют по-сути неокогнитроны и свёртки по очереди через один слой. Очевидно, что десяток стыкованных неокогнитронов даже без сверток лучше чем один. К перцептрону в смысле изначальной розенблаттовской модели это все относится очень опосредованно.
Шизик, иди нахуй.
>Если не ограничиваться только задачами с конкретными архитектурами, связанными просто с природой самого датасета, как например сверточные сети для распознавания изображений.
А как ты этим можешь не ограничиваться? Возьмем датасет, состоящий из рандомного шума, при чем не псевдорандомного, а рандомного. Очевидно, что однослойный подход будет работать лучше всего.
Но любой объект реального мира, с которым работает человек, ведет себя как решение каких-то дифференциальных уравнений и локально подчиняется каким-то простым правилам, последовательно применяемым друг к другу. Скорее всего причина в антропном принципе, если бы физические законы не были просты, то и разумной жизни не могло бы возникнуть. Соответственно идеальный предсказатель должен выглядеть как численный решатель какого-либо дифференциального уравнения. И решения крайне редко выглядят как sum(alpha(Wt+phi)).
На самом деле согласно последней статье про lottery ticket (https://arxiv.org/abs/1803.03635) ширина тоже важна для хорошего initial guess, но без глубины ты нужной мощности точно не получишь.
>Да не, достаточно взять слой из N+1 нейрона для N нейронов на входе.
Исходя из этого, ты можешь аппроксимировать любую одномерную функцию с помощью двух параметров. Это нонсенс. Если ты скажешь, что у тебя хитрая функция активации, то в которую ты спрячешь всю сложность, то функция активации сама по себе одна и та же для каждого выхода, и нонсенс получается уже в двумерном случае.
>Соответственно идеальный предсказатель должен выглядеть как численный решатель какого-либо дифференциального уравнения. И решения крайне редко выглядят как sum(alpha(Wt+phi)).
>На самом деле согласно последней статье про lottery ticket (https://arxiv.org/abs/1803.03635) ширина тоже важна для хорошего initial guess, но без глубины ты нужной мощности точно не получишь.
Ну блин это все философия какая-то. Т.е. насколько я понял до сих пор не известно.
Есть теорема Колмогорова, что композиции линейных комбинаций и нелинейной функции одного переменного уже при вложенности 3 могут аппроксимировать любую заранее заданную непрерывную функцию, но я боюсь призвать шизика. Ну и плюс оказывается, что большие сетки с удачно подобранными архитектурными фичами (свёртки, гейты в LSTM, механизм внимания) начинают на достаточно больших наборах данных извлекать себе признаки.
В общем nмерном случае монотонность по каждому аргументу в любом случае ничего не говоритю
> Есть теорема Колмогорова,
Которая гласит, что функция многих переменных может быть аппроксимирована суперпозицией функций от двух переменных?
>Т.е. насколько я понял до сих пор не известно.
Это - известно. Глубокие нейронки выразительнее широких с тем же числом параметров. Почему я написал.
Неизвестно другое - почему обучение градиентным спуском так хорошо работает. Есть предположения, но они не доказаны.
Спасибо огромное, мудрый анон
Решаю одну несложную задачку по построению регрессии
Необходимо предсказывать действитлбное число от -1 до 1
Запилил простенькую сетку в керас на 3 слоя, с тангенсами в качестве активационных функций
Все работает как надо, но для того чтобы ее использовать вдиссере необходимо доказать, что данная сетка наиболее оптимальна
Че дальше с ней сделать вообще можно? как улучшить?
Пока поигрался с количеством нейронов, активационными функциями и алгоритмами оптимизации
Может нужно структуру менять или что-тодобавить?
Построй RF, SVR с нелинейным ядром, GBDT, OLS, Ridge, Lasso, ElasticNet ,KRR, сравни их с сеткой по 5/10 фолдовой CV или LOO, и на тестовом множестве замерь метрику.
спс, основной посыл понял, буду изучать
Получается по сути мы разрабатываем отдельные сетки под конкретные виды регрессии?
Есть какой источник типа книги или учебника, где подробно описано применение инс для решения задач регрессии? Для изучения и чтобы было на что сослаться
После этого я пытался сделать нейронную сеть на Keras, копипастив коды из книжек и гугла, и моя нейронная сеть дает очень плохую точность на тестовых данных. Потому что я не знаю как правильно выбирать число нейронов, количество слоев и другие параметры нейронной сети. И получается ужас.
Подскажите, пожалуйста, какие-нибудь видеокурсы на русском языке или книги, где рассказывается как правильно выбирать количество слоев, количество нейронов, как правильно задавать для нейронной сети значения параметров momentum, learning rate, decay, epsilon, какую выбирать регуляризацию. Помогите!
![15573789509430.jpg](/pr/big/thumb/1373612/15582380201030s.jpg)
Зумера с профильным образованием не могут в машоб.
> я пытался сделать нейронную сеть на Keras,
Ну тау и почитай книжку от самого автора кераса. Он очень грамотно поясняет за диплернинх в т.ч на практических примерах в керасе. Или ты и в английский не можешь? Это же пиздец, отучиться и ко времени написания диплома даже не понимать что копипастишь, откуда и зачем.
>задали диплом с темой по нейронным сетям. Мне нужно несколько наборов данных проклассифицировать и добиться неплохой точности на тестовых данных
Лол, за это диплом дают? А если я какой-нибудь Sphere GAN дома реализовал, мне дадут докторскую степень сразу?
Сначала диплом за классификацию ирисов получи.
>Ну тау и почитай книжку от самого автора кераса.
Ладно, спасибо, вроде, это и есть Ф.Шолле, еще раз посмотрю, попробую.
>>403641
>Лол, за это диплом дают?
>Сначала диплом за классификацию ирисов получи.
Да, дают. Но набор данных с ирисами Фишера взять, естественно, нельзя, можно только те наборы данных, что принудила взять кафедра.
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
ПЕРЕКАТ! https://2ch.hk/pr/res/1406660.html (
![](img/mob.gif)
Это копия, сохраненная 13 июня 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.