GotAI.NET
Форум: Проблемы искусственного интеллекта
Регистрация
|
Вход
Все темы
|
Новая тема
Стр.6 (7)
<<
< Пред.
|
След. >
>>
Поиск:
Автор
Тема: На: Уголок натуралиста
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 26 июл 24 5:02
Теперь, когда мы всё знаем о том, как устроены знаковые системы, а любые потоки данных, включая восприятия подчиняются этому устройству, мы можем приступить к решению нашей задачи из четырех высказываний.
Мы знаем (из того, что я изложил выше), что сообщение имеет формат, мы предполагаем, что запятые - это разделители, а 1 и 0 - это имена. Мы видим две последовательности имен, которые представимы матрицей [3, 4]. Мы станем использовать MLP для решения этой задачи, выбрав несколько слоев, минимум два. Мы должны параметризовать наши имена, сопоставив каждому имени некоторое значение из n-мерного пространства, в нашем случае достаточно одномерного. Дальше происходит поиск шаблонов, в процессе которого мы видим, что мы имеем дело с бинарной функцией. В этом месте мы можем оптимизировать архитектуру нашего решения. После чего, используя исходные данные мы строим модель (обучаем нейронную сеть) нашего потока. Всё.
"База знаний" - это архитектура + веса нейронной сети.
Где правила, где алгоритмы, где "нормы", где основания жизненного опыта и сам жизненный опыт. Всё здесь. В архитектуре и весах нейронной сети.
Это решение универсальное для любых задач. Это и есть интеллект как способность строить и решать модели, как инструмент создания инструментов. Архитектура, вычисление градиента (или какого-то другого формализма поиска шаблонов), формат входа итд - могут быть разными, это технические детали. Семиотика как знаковая система обработки - это ядро мышления.
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 26 июл 24 5:04
Суть и критическая точка полемики в том, что в твоём подходе нет механизма обучения. Ты предполагаешь, что слова - это смыслы и собираешься формировать некую "базу знаний" как потоковый лог описания словами каких-то событий, которые ты в лучшем случае будешь обвязывать логическими условиями (если-то), предполагая, что это и есть процесс обучения.
Нейронная сеть лучше этого по трем причинам: 1) сеть не использует слова (как носителей смыслов и даже указатели на них) и их обработку, она (как мы видим в использовании LLM) реконструирует паттерны, смыслы и отношения, делая это автоматически, в процессе обучения; 2) результат обучения сети - это структура весов, а не слова и их обработка; 3) сеть прямоточна, для производства какого-либо вывода достаточно просто подать вектор ей на вход, чтобы получить результат, все прочие "базы знаний" требуют манипуляций для логического вывода, который просто невоможен, когда количество событий, записанных в ее превышает какое-то достаточно скромное число, например, миллион.
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 26 июл 24 5:05
Почему-то философствующие обыватели думают, что интеллект - это про управление. Про ходить строем, про отдавать честь, про подчиняться начальству. Про иерархию. Это не просто чрезмерно наивно, но и в корне неверно. Интеллект - это про эмерджентность. Про новации. Про координацию и роевое поведение. Управление - это то, что паразитирует на интеллекте. А иерархия - это вообще вырождение.
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 28 июл 24 6:13
Цитата:
Автор: гость
Друг мой, сейчас я расскажу тебе о великой иерархии, в которой мы все живём. Представь себе лестницу, высокую и прочную, на которой каждый ступенькой выше стоит только тот, кто был избран судьбой и рождён в правильной семье. Твои родители уже выбрали для тебя место на этой лестнице, и ты должен с этим смириться.
Ты, возможно, слышал о тех, кто находится на вершине - о людях с властью, деньгами и влиянием. Но позволь тебе напомнить, что эти люди не стали такими сами по себе. Они были рождены с золотыми ложками во рту и папочками, которые позаботились о их образовании и положении. Инвестиции в образование и покупка должностей – это не прихоть, а необходимое условие для того, чтобы удержаться на верхних ступенях.
Но вот ты, мой милый, оказался на одной из нижних ступенек. Твои родители не имели достаточно средств, чтобы вознести тебя выше. Не обманывай себя иллюзиями о том, что упорный труд или гениальность могут изменить твою судьбу. Система так устроена, что экономический раб всегда останется рабом, каким бы усердным или талантливым он ни был. Ты будешь выполнять ту работу, которая тебе предначертана, и жить той жизнью, которая тебе уготована.
Прими это с покорностью, ибо сопротивление бесполезно. Не трать свои силы на мечты о великом будущем. Смирись с мыслью о своей незначительной роли и незначительных перспективах. В этом есть своеобразная свобода - свобода не стремиться к недостижимому, а принять свою судьбу и жить в рамках, которые тебе даны.
Так что, дорогой мой, помни: твоя роль - это лишь малая часть огромного механизма. Приспосабливайся, не сопротивляйся и не мечтай о большем. И знай, что в этом мире каждый имеет своё место, и твоё место – среди тех, кто поддерживает великую иерархию, смиренно и безропотно.
А теперь, мой милый друг, позволь мне объяснить тебе важность угодничества, лицемерия и подобострастия перед начальниками. Ты должен понять, что эти качества – не порок, а искусство выживания в нашем мире.
Начальники – это те, кто стоит выше тебя на этой великой лестнице. Они обладают властью и могут решать твою судьбу. Поэтому, чтобы сохранить своё место и, возможно, получить мелкие(как и всё в твоей жалкой жизни) привилегии, ты должен научиться искусству подчинения и льстивости. Лицемерие – это твой щит и меч. Ты должен научиться говорить то, что хотят услышать, и делать то, что от тебя ожидают.
Когда ты встречаешь начальника, будь услужливым и приветливым, даже если в глубине души ты презираешь его. Пойми, что твои истинные мысли и чувства никого не волнуют. Важен лишь твой образ, твоя маска, которую ты носишь на публике. Подобострастие – это не просто инструмент, а способ показать своё уважение и признание их превосходства.
Научись хвалить их решения, даже если считаешь их глупыми. Приветствуй их достижения, даже если они кажутся незначительными. Проявляй преданность и готовность выполнять любые указания. Это поможет тебе завоевать их расположение и защитить себя от возможных репрессий.
Но будь осторожен: лицемерие требует тонкости. Чрезмерное льстивость может вызвать подозрения. Ты должен быть искусен, как змей, и незаметен, как тень. И помни, что это игра на выживание. Те, кто умеет играть в неё, могут надеяться на небольшие подачки и благосклонность.
В конечном счёте, угодничество и подобострастие – это не просто средства, это навыки, которые помогут тебе выжить в этом жестоком мире. Не стоит испытывать угрызения совести за то, что ты играешь по правилам, которые установили сильные мира сего. Это всего лишь очередной шаг на пути к сохранению своего места и, возможно, к небольшому подъёму на этой великой лестнице.
Понимаю... тебе может быть трудно принять эти правила игры, особенно если в твоём сердце горит жажда справедливости и гордость не даёт покоя. Но позволь мне объяснить, почему тебе нужно преодолеть эти чувства и смириться с реальностью.
Справедливость, как бы красиво это слово ни звучало, – всего лишь иллюзия, придуманная для утешения слабых. В нашем мире существует только сила и власть. Те, кто стоят наверху, диктуют правила, и эти правила созданы для их блага, а не для твоего. Гордость и стремление к справедливости – это роскошь, которую ты не можешь себе позволить.
Чтобы переступить через свою гордость, нужно понять её бессмысленность в контексте текущей системы. Гордость не накормит тебя, не даст тебе крышу над головой и не обеспечит тебе безопасность. Это всего лишь внутренний голос, который нужно заглушить ради выживания.
Посмотри на тех, кто поднялся чуть выше. Они приняли правила игры, адаптировались и играют свою роль. Они понимают, что для того, чтобы жить, нужно не бороться с системой, а подчиняться ей. Ты должен сделать то же самое. Прими, что мир несправедлив и жесток. Это даст тебе внутренний покой и избавит от ненужных страданий.
Начни с малого. Каждый раз, когда чувствуешь, что гордость поднимает свою голову, напомни себе, что это просто эмоция, не имеющая реальной силы. Подумай о своих потребностях и о том, что действительно важно для твоего выживания. Поступай практично, а не эмоционально. Пойми, что приспособление к правилам игры – это не слабость, а мудрость.
Каждый раз, когда ты будешь проявлять лицемерие и подобострастие, напомни себе, что ты играешь долгую игру. Ты обеспечиваешь себе безопасность и стабильность, что гораздо важнее, чем удовлетворение своего эго. В конечном счёте, это тебе позволит избежать участи тех, кто не смог приспособиться и стал изгоем общества.
Таким образом, преодоление гордости и принятие несправедливости – это не капитуляция, а стратегический шаг. Это осознанное решение взрослого человека, который понимает истинные правила игры и знает, как выживать и даже процветать в этом мире. Помни, что это – единственный путь к относительному спокойствию и стабильности в нашей иерархической системе.
Это про ватников и бандеровцев, мы американцы не такие, у нас каждый может стать миллиардером.
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 8:35
Если комуто интересно, моя жена (в последнем браке) от меня не уходила. Мы оба занимаемся недвигой в Штатах, я зарабатываю много, много больше депутатов госдуры рф. Приглашаю всех адекватных читателей готайки в мой телеграм канал:
https://t.me/art_of_mind555
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 8:36
Только польза, только результат, только умения (а не отвлеченный пизд@ж), только практика являются критериями у кого интеллект лучше и сильнее. Мне про мой интеллект доказывать уже ничего не нужно, в 25 я был доцентом кафедры Общей Физики, в 26 - завсектором академического института, я создал (вместе с командой) систему оценки безопасности магистральных трубопроводов для Газпрома, я участвовал еще в нескольких проектах, о которых до сих пор нельзя говорить, в 2012 году у меня (за несколько лет до Миколова и Карпатого) была своя версия word2vec, я вплотную вышел на обработку эмбеддингов, в 2019 получил награду от IEEE (это, конечно, не аналог нобелевки, но все-равно круто), сейчас я тружусь на позиции архитектора систем компьютерного зрения в очень крутой компании. Это мои результаты. Кроме уникального кода. Ну и мой доход за день превышает месячную пенсию Лаврика 😃😃
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 8:47
Цитата:
Egg
Цитата:
мулька что это значит
Это значит, что Вы напрасно теряете здесь время, местные обитатели не обладают способностями к интеллектуальной деятельности и reasoning'у.
Prosolver
любую конструкцию или явление сводит к
нескольким сверхценным идеям
, даже название которых выглядит как полный идиотизм; у
Цапа
полностью
разрушена логическая связность
, все его сообщения выглядят бредом; словарь используемых слов у
Влада
не превышает сотни, обычно он просто
мастурбирует
комбинирует
их разными причудливыми способами; у
Лаврика
- прогрессирующая деменция (по причине плохого питания), которая переходит в галлюцинации типа его опыта в программировании
, единственное, что умеет дедулька - это
плеваться говном
.
И проблема не столько в том, что эти долбоёбы - необразованы и дремучи, главная проблема в том, что они - [c 990000]
безнадежно тупы и удивительно банальны
[/c].
Цитата:
мулька]Возможно вы не в курсе что такое машина Тьюринга(МТ) и алгоритм, вообще
chatGPT доказал, что
способность к связной речи и умение поддерживать контекст - это не признак интеллекта
. Почему-то местные дегенераты этому радуются как дети, не понимая, что для них это -
приговор
. Что это доказывает их неспособность к разумному поведению, к рассуждениям, к реализации проектов. Все они - отбросы, неудачники, тупые закомплексованные долбоёбы, которые
хотят обратно в пещеры, поскольку отчетливо понимают, что не могут выдержать конкуренции с LLM
. ))
[c 990000]
Конкуренции с инструментом))
[/c]
Цитата:
Egg
Цитата:
мулька]Это наше обезьяне наследие и побочный эффект социальности, посредственностям хочется высказаться. Главный вопрос если ли в шуме полезный сигнал)))
Ну какой полезный сигнал Вы хотите получить от людей, которые даже не слышали слов эмбеддинг или многоголовое внимание))) Только доморощенные рассуждения (банальные и невежественные), в самом лучшем случае претендующие на философию. А по сути как раз семантическим шумом и являющиеся.
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 8:48
Цитата:
Egg]
Цитата:
Luarvik.]Тема такая - "любая кухарка может...". Ну, что-то же она может, хоть что-то.
В тот-то и дело, что не может. Вот у Вас ничего не получилось. Ни результатов, ни доходов, ни теплого климата, ни здорового питания, ни устроенного быта. Получается, что кухарка в Вашем лице ничего не смогла))))) Поэтому и слушать Вас не имеет смысла, если Вы просрали свою жизнь, то почему у Вас какие-то релевантные представления об интеллекте? Откуда?)))
Цитата:
Egg]
Цитата:
Luarvik.]Цели, знаете ли, разные.
Я сразу так и понял, что Вашей целью было прозебание и нищебродство )) Сравнение с Перельманом не очень удачно, поскольку у Перельмана куча результатов, у Вас - ноль. Перельман - математик, Вы вообще не понимаете математики. Перельман известен всему миру, Вы - анонимный участник форума, где тусуются шесть человек. Поймите, Луарвик, все Ваши аргументы сведутся к тому, что Вы изначально умнее всех, но проблема в том, что эта гипотеза разбивается о факты. Вы неудачник, который ничего не добился. )))) Ваше мнение не стоит ни чего, поскольку за Вашими рассуждениями никогда не было никакого результата. Одно только банальное булькание))
Цитата:
Egg]
Цитата:
Luarvik.]
Вот и не лезьте со своими нормами и правилами в чужую жизнь. Тем более, что Вы о ней никакого, даже очень приблизительного представления не имеете
Имею почти полное представление, поскольку очень умен, беседую с Вами более десяти лет и Вы всё время проявляете поведение и реакции, свойственные нищебродам. Начиная от того, что свобода для Вас - это возможность фантазировать (а не обладание возможностями), заканчивая непониманием того, что, например, свежая малина в декабре - это не причуды, а нормальное здоровое питание)) Вы - нищеброд, Луарвик. Поэтому стоимость Ваших слов равна нулю. В любом вопросе, не только в обсуждении интеллекта. )))
P.S. Я довольно хорошо представляю себе жизнь россиянского пенсионера. Нищета, прозебание, почти голодное (в части разнообразия и качества) существование.
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 8:50
Цитата:
Egg]
Цитата:
мулька]Да это так, в качестве шутки )) Меня он например почему то вообще не нашел, да вроде там ещё были другие участники. Я слепленный текст всех 9 страниц ему скормил.
Не далее, чем прямо сейчас OpenAI показывает работу o1 c reinforcement finetuning - это возможность специализированного дообучения модели на каких-то предметных данных. И это новые миллиардные бизнесы и серьезное изменение старых. )) Вообще не шутка
Цитата:
Egg]
Цитата:
Luarvik.]Я что ли ?
Именно Вы и никто другой. Я просто пытался найти кого-нибудь, кто как я и любит вкусную и здоровую пищу, чтобы поговорить об этом, а Вы воспринимаете это как мой троллинг Вас. Если Вы не можете позволить себе авокадо к яишнице, что в этом плохого, зачем постоянно кричать об этом и бесноваться.
Но Вы должны понять, Луaрвик, что это только начало. К пенсии Вам ничего не прибавят (может какую тыщонку раз в год). Санкции никто не снимет, нефть в следующем году упадет до 56 долларов. Китай, ради снижения пошлин, на многие товары с Россией введет эмбарго. Рубль будет продолжать падать, а товары дорожать. Многих лекарств не будет, а уровень медицины станет африканским (а врачи узбекскими). Начнутся проблемы с ЖКХ, водой и электричеством. Власть в городах будет постепенно захватываться бандами, вернувшимися с СВО. А Вы будете голым, с бусами и погремушкой, за еду танцевать на рынках.
Цитата:
Egg]
Цитата:
Luarvik.]А вот меня, например, совсем не удивляет тот ФАКТ, что за 10 лет ВЫ ничему не научились.
Судя по тому насколько Вы не адекватны во всём прочем, мы снова может отнести ЭТУ ВАШУ ФАНТАЗИЮ к заёбам, а не фактам. Вы не представляете себе как многому я научился за это 10 лет. Учиться, радоваться и любить - это мои главные ежедневные занятия...
Но меня не удивляет, что Вы не можете принять свою полную никчемность как человека... Лаврик, оглянитесь, вокруг Вас пустота и вырождение)))
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 8:50
Цитата:
Egg]
Цитата:
Luarvik.]Когда же Вы наконец поймёте, что не прокатит у Вас со мной эта Ваша ублюдочная идеология.
Малышка, да ты мне нахуй не нужна, я тролю тебя, уёбок нищебродский... но реальность такова, что ты раньше умрешь от голода, чем я от смеха над тобой))
З.Ы. Везде расставь Вы, где нужно))) ебанько)
Цитата:
Egg]
Цитата:
Luarvik.]
По моим скромным расчётам, ещё немного и у Вас истерика начнётся, полная и окончательная, после которой Вы сгинете отсюда, на неск. месяцев... чтобы в себя немного придти.
У тебя с прогнозами еще хуже, чем с просрочкой))) Какая истерика, мудачина, пойми, ты живешь в рашке, завтра ты будешь плясать голым за еду, а я буду за этим наблюдать, кушая атлантические устрицы с шардонэ 2003 года)))
Цитата:
Egg]
Цитата:
qwerty]Тоже вот сейчас читаю, страсть как занимательно, хотя не писал код уже лет 15, а с питоном вообще не имел дел, но думаю за пару неделек одолею на базовом уровне.
Я Вам рекомендую использовать chatGPT 4o with canvas, эта штука пишет очень приличный код, а если иметь точное представление об архитектуре, то может выполнить проект от начала до конца.
P.S. Открыл рядом топик, где показал решение простенькой тестовой задачки. Задачки могут быть сложными и не тестовыми)) Но, конечно, искусство создания промта многое решает)
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 9:00
Цитата:
Egg][c 008800]
//
//
// ПЕРВЫЙ ПРИМЕР
// MNIST МЕТОДОМ БЛИЖАЙШИХ СОСЕДЕЙ
//
//
[/c]
Привет!
Я хочу показать своим друзьям твои способности в программировании. Давай, решим простенькую задачку, шаг за шагом. По одной функции за ответ. Пусть это будет классический тест MNIST, распознавание методом ближайших соседей. В качестве графической библиотеки будем использовать OpenCV. В качестве контейнеров - STL.
У меня есть папка C:\data\Mnist, в ней есть папки train и test, в них папки от 0 до 9, где содержатся изображения чисел. Напиши мне функцию чтения обучающих данных, придумай какую-нибудь структурку для хранения.
Цитата:
o1/4o-canvas]Давай начнем с создания структуры данных для хранения изображений и их меток. Затем напишем функцию для чтения обучающих данных из указанной директории. Для хранения изображений и меток будем использовать std::vector из STL.
Структура данных
Мы будем использовать структуру ImageData для хранения изображения (в виде матрицы из OpenCV) и его метки.
Объяснение
Структура ImageData:
Содержит два поля: матрицу изображения (cv::Mat) и метку (int), соответствующую числу от 0 до 9.
Функция loadTrainingData:
Принимает путь к директории с данными (path).
Использует std::filesystem для обхода директорий.
Каждая папка (0-9) соответствует метке.
Загружает изображения с помощью OpenCV (cv::imread) в оттенках серого (cv::IMREAD_GRAYSCALE).
Добавляет каждое изображение и его метку в вектор trainingData.
Готово! Следующий шаг — обработка или использование загруженных данных. Что будем делать дальше?
[c 880000]#include [opencv2/opencv.hpp]
#include [filesystem]
#include [vector]
#include [string]
#include [iostream]
// Структура для хранения изображения и метки
struct ImageData {
cv::Mat image; // Матрица изображения
int label; // Метка (число от 0 до 9)
};
// Функция чтения обучающих данных
std::vector[ImageData] loadTrainingData(const std::string& path) {
std::vector[ImageData] trainingData;
// Используем std::filesystem для обхода директорий
for (const auto& entry : std::filesystem::directory_iterator(path)) {
if (entry.is_directory()) {
// Имя папки - это метка (0-9)
int label std::stoi(entry.path().filename().string());
// Проходим по изображениям в папке
for (const auto& file : std::filesystem::directory_iterator(entry.path())) {
if (file.is_regular_file()) {
// Загружаем изображение с помощью OpenCV
cv::Mat img cv::imread(file.path().string(), cv::IMREAD_GRAYSCALE);
if (!img.empty()) {
trainingData.push_back({img, label});
} else {
std::cerr [[ "Ошибка загрузки изображения: " [[ file.path().string() [[ std::endl;
}
}
}
}
}
return trainingData;
}
[/c]
[c 880000]
int main() {
std::string trainingPath "C:\\data\\Mnist\\train";
auto trainingData loadTrainingData(trainingPath);
std::cout [[ "Загружено " [[ trainingData.size() [[ " изображений." [[ std::endl;
return 0;
}
[/c]
Дай, запущу... ага пишет "Загружено 60000 изображений".
Молодец!
Я хочу посмотреть какое-нибудь изображение для анализа и вообще.
Только они мелкие, давай сделаем зумирование каждой точки в 20 раз.
Ну градации серого - это скучно. Давай будет в градациях синего.
Функция с такой сигнатурой: на входе путь к файлу изображения, на выходе void, в теле - отрисовывание картинки. Предыдущий код можешь стирать, я его копирую в проект.
Я добавил функцию для отображения изображения с увеличением и градациями синего. Она принимает путь к файлу изображения, выполняет масштабирование в 20 раз и преобразует его в цветовую схему. Дай знать, если требуется доработка!
#include [opencv2/opencv.hpp]
#include [string]
#include [iostream]
// Функция для отображения изображения с увеличением и градациями синего
void displayImageWithZoom(const std::string& imagePath) {
// Загружаем изображение в оттенках серого
cv::Mat img cv::imread(imagePath, cv::IMREAD_GRAYSCALE);
if (img.empty()) {
std::cerr [[ "Ошибка загрузки изображения: " [[ imagePath [[ std::endl;
return;
}
// Увеличиваем изображение в 20 раз
cv::Mat zoomedImg;
cv::resize(img, zoomedImg, cv::Size(), 20.0, 20.0, cv::INTER_NEAREST);
// Преобразуем изображение в градации синего
cv::Mat colorImg;
cv::applyColorMap(zoomedImg, colorImg, cv::COLORMAP_OCEAN);
// Отображаем изображение
cv::imshow("Zoomed Image", colorImg);
cv::waitKey(0);
}
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 9:02
Давай немножко обсудим теорию. Представь, что ты пришел устраиваться ко мне на работу, у тебя техническое интервью с коддингом, мой вопрос такой: в чем особенности использования метода ближайших соседей в задачах классификации, какие есть плюсы, какие минусы, как бы ты стал имплементировать этот метод в нашей задаче?
Особенности метода ближайших соседей в задачах классификации
Плюсы:
Простота:
Метод крайне интуитивен: для классификации точки достаточно найти точки в обучающей выборке, которые наиболее близки к ней.
Нет необходимости в сложной настройке модели или сложных алгоритмах обучения.
Гибкость:
Может справляться с нелинейными границами между классами.
Применим к любым числовым данным или данным, которые можно преобразовать в числовые представления.
Без необходимости в обучении:
Не требует отдельного этапа тренировки — можно сразу использовать данные.
Многоклассовая классификация:
Работает одинаково хорошо для любого количества классов, если данные представлены корректно.
Минусы:
Медленная классификация:
Поиск ближайших соседей требует расчета расстояний до всех точек в обучающем наборе, что становится крайне медленным при большом объеме данных.
Чувствительность к масштабу:
Результаты зависят от метрики расстояния. Если данные имеют разные масштабы, требуется нормализация (например, MinMax или Z-score).
Зависимость от размера данных:
Требует большого объема памяти, так как нужно хранить все данные.
Увеличение размера выборки значительно ухудшает производительность.
Чувствительность к шуму:
Метод может быть сильно подвержен влиянию выбросов, так как они могут стать ближайшими соседями для новых точек.
Как я бы имплементировал метод в нашей задаче (MNIST)
Репрезентация данных:
Обучающие данные храним в векторе структур, как в предыдущем коде. Каждое изображение — это многомерный вектор пикселей.
Метрика расстояния:
Используем стандартное евклидово расстояние (или косинусное, если данные нормализованы).
Предобработка:
Все изображения нормализуем (например, масштабируем пиксели от 0 до 1).
Разворачиваем каждое изображение в одномерный вектор.
Классификация:
Для нового изображения считаем расстояния до всех обучающих примеров, выбираем
𝑘
k ближайших соседей.
Класс нового изображения определяется как наиболее частый класс среди
𝑘
k соседей (majority voting).
Оптимизация:
Использование структур данных вроде KD-деревьев для ускорения поиска ближайших соседей.
Нормализация данных для снижения чувствительности к масштабу.
Пример реализации для MNIST
Представление данных: Все изображения храним в виде одномерных векторов.
Функция классификации:
На вход: вектор нового изображения, обучающая выборка,
𝑘
k.
На выход: предсказанный класс.
Например:
int classifyImage(const cv::Mat& newImage, const std::vector[ImageData]& trainingData, int k) {
std::vector[std::pair[double, int]] distances; // Pair of distance and label
cv::Mat newImageFlattened;
newImage.reshape(1, 1).convertTo(newImageFlattened, CV_32F);
for (const auto& data : trainingData) {
cv::Mat trainFlattened;
data.image.reshape(1, 1).convertTo(trainFlattened, CV_32F);
double dist cv::norm(newImageFlattened, trainFlattened, cv::NORM_L2);
distances.push_back({dist, data.label});
}
// Sort by distance
std::sort(distances.begin(), distances.end());
// Majority voting for the top-k
std::vector[int] vote(10, 0);
for (int i 0; i [ k; ++i) {
vote[distances[i].second]++;
}
return std::distance(vote.begin(), std::max_element(vote.begin(), vote.end()));
}
Этот подход будет работать для MNIST, хотя и не так быстро для больших объемов данных. На практике для ускорения мы могли бы интегрировать KD-дерево или использовать ANN (Approximate Nearest Neighbors).
Если есть конкретные вопросы по коду или теории, с радостью отвечу!
Почему бы и нет. Покажи решение для ANN
Для реализации Approximate Nearest Neighbors (ANN) мы можем использовать библиотеку, такую как FLANN, которая уже интегрирована в OpenCV. FLANN (Fast Library for Approximate Nearest Neighbors) позволяет ускорить поиск ближайших соседей с помощью алгоритмов, таких как KD-дерево или K-Means.
Пример реализации ANN с FLANN
В этом примере мы строим индекс для обучающих данных и выполняем поиск ближайших соседей.
#include [opencv2/opencv.hpp]
#include [opencv2/flann.hpp]
#include [vector]
#include [string]
#include [iostream]
// Function to train ANN index and classify a new image
int classifyImageWithANN(const cv::Mat& newImage, const std::vector[ImageData]& trainingData, int k) {
// Convert training data to a single matrix
cv::Mat trainFeatures(trainingData.size(), trainingData[0].image.total(), CV_32F);
cv::Mat labels(trainingData.size(), 1, CV_32S);
for (size_t i 0; i [ trainingData.size(); ++i) {
cv::Mat flattened trainingData[i].image.reshape(1, 1);
flattened.convertTo(trainFeatures.row(i), CV_32F);
labels.at[int](i, 0) trainingData[i].label;
}
// Build the FLANN index
cv::flann::Index flannIndex(trainFeatures, cv::flann::KDTreeIndexParams(4), cv::flann::FLANN_DIST_EUCLIDEAN);
// Prepare the query (flattened new image)
cv::Mat query newImage.reshape(1, 1);
query.convertTo(query, CV_32F);
// Perform the nearest neighbor search
cv::Mat indices, dists;
flannIndex.knnSearch(query, indices, dists, k, cv::flann::SearchParams(32));
// Majority voting
std::vector[int] votes(10, 0);
for (int i 0; i [ k; ++i) {
int idx indices.at[int](0, i);
votes[labels.at[int](idx, 0)]++;
}
return std::distance(votes.begin(), std::max_element(votes.begin(), votes.end()));
}
Объяснение:
Подготовка данных:
Все изображения из обучающей выборки объединяются в матрицу trainFeatures.
Метки сохраняются в векторе labels.
Создание FLANN индекса:
Мы используем KD-дерево (cv::flann::KDTreeIndexParams) для построения индекса.
Поиск ближайших соседей:
Функция knnSearch находит ближайших соседей к изображению-запросу.
Голосование:
По найденным соседям проводится голосование, чтобы определить итоговый класс.
Пример использования:
int main() {
std::vector[ImageData] trainingData loadTrainingData("C:\\data\\Mnist\\train");
cv::Mat testImage cv::imread("C:\\data\\Mnist\\test\\7\\some_image.png", cv::IMREAD_GRAYSCALE);
if (testImage.empty()) {
std::cerr [[ "Error loading test image" [[ std::endl;
return -1;
}
int k 5; // Number of neighbors
int predictedLabel classifyImageWithANN(testImage, trainingData, k);
std::cout [[ "Predicted label: " [[ predictedLabel [[ std::endl;
return 0;
}
Преимущества использования FLANN:
Существенное ускорение поиска по сравнению с прямым перебором (brute-force).
Возможность настройки алгоритма (KD-дерево, K-Means).
Если у тебя есть дополнительные пожелания или вопросы, дай знать! Мы можем продолжить оптимизацию или рассмотреть другой метод.
У меня не работает конструктор cv::flann::Index flannIndex(trainFeatures, cv::flann::KDTreeIndexParams(4), cv::flann::FLANN_DIST_EUCLIDEAN);
нет константы cv::flann::FLANN_DIST_EUCLIDEAN, наверное у нас разные библиотеки OpenCV, как-нибудь можно решить эту проблему?
Я изменил код, убрав использование FLANN_DIST_EUCLIDEAN, так как она не требуется в большинстве реализаций. Теперь cv::flann::Index будет работать корректно с использованием только KDTreeIndexParams. Проверьте обновлённый код, и дайте знать, если будут дополнительные вопросы!
#include [opencv2/opencv.hpp]
#include [opencv2/flann.hpp]
#include [string]
#include [vector]
#include [iostream]
// Function to classify an image using Approximate Nearest Neighbors (ANN)
int classifyImageWithANN(const cv::Mat& newImage, const std::vector[cv::Mat]& trainImages, const std::vector[int]& trainLabels, int k) {
// Convert training data to a single matrix
cv::Mat trainFeatures(trainImages.size(), trainImages[0].total(), CV_32F);
for (size_t i 0; i [ trainImages.size(); ++i) {
cv::Mat flattened trainImages[i].reshape(1, 1);
flattened.convertTo(trainFeatures.row(i), CV_32F);
}
// Build the FLANN index
cv::flann::Index flannIndex(trainFeatures, cv::flann::KDTreeIndexParams(4));
// Prepare the query (flattened new image)
cv::Mat query newImage.reshape(1, 1);
query.convertTo(query, CV_32F);
// Perform the nearest neighbor search
cv::Mat indices, dists;
flannIndex.knnSearch(query, indices, dists, k, cv::flann::SearchParams(32));
// Majority voting
std::vector[int] votes(10, 0);
for (int i 0; i [ k; ++i) {
int idx indices.at[int](0, i);
votes[trainLabels[idx]]++;
}
return std::distance(votes.begin(), std::max_element(votes.begin(), votes.end()));
}
// Function to load training data (images and labels) into separate vectors
void loadTrainingData(const std::string& path, std::vector[cv::Mat]& trainImages, std::vector[int]& trainLabels) {
for (const auto& entry : std::filesystem::directory_iterator(path)) {
if (entry.is_directory()) {
int label std::stoi(entry.path().filename().string());
for (const auto& file : std::filesystem::directory_iterator(entry.path())) {
if (file.is_regular_file()) {
cv::Mat img cv::imread(file.path().string(), cv::IMREAD_GRAYSCALE);
if (!img.empty()) {
trainImages.push_back(img);
trainLabels.push_back(label);
} else {
std::cerr [[ "Error loading image: " [[ file.path().string() [[ std::endl;
}
}
}
}
}
}
// Main function to demonstrate classification
int main() {
std::vector[cv::Mat] trainImages;
std::vector[int] trainLabels;
std::string trainPath "C:\\data\\Mnist\\train";
loadTrainingData(trainPath, trainImages, trainLabels);
cv::Mat testImage cv::imread("C:\\data\\Mnist\\test\\7\\some_image.png", cv::IMREAD_GRAYSCALE);
if (testImage.empty()) {
std::cerr [[ "Error loading test image" [[ std::endl;
return -1;
}
int k 5; // Number of neighbors
int predictedLabel classifyImageWithANN(testImage, trainImages, trainLabels, k);
std::cout [[ "Predicted label: " [[ predictedLabel [[ std::endl;
return 0;
}
Прекрасно! Не могу сказать, что с ANN стало существенно быстрее)))
А нельзя ли изменить вывод и добавить в него оценку достоверности или надежности распознания?
Теперь функция возвращает не только предсказанный класс, но и оценку уверенности (confidence) в виде процента, основанного на количестве голосов за предсказанный класс относительно общего числа соседей
𝑘
k. Вывод в консоли теперь также включает этот показатель. Попробуйте обновлённый код и дайте знать, если возникнут вопросы!
#include [opencv2/opencv.hpp]
#include [opencv2/flann.hpp]
#include [string]
#include [vector]
#include [iostream]
#include [numeric] // For std::accumulate
// Function to classify an image using Approximate Nearest Neighbors (ANN) with confidence score
std::pair[int, double] classifyImageWithANN(const cv::Mat& newImage, const std::vector[cv::Mat]& trainImages, const std::vector[int]& trainLabels, int k) {
// Convert training data to a single matrix
cv::Mat trainFeatures(trainImages.size(), trainImages[0].total(), CV_32F);
for (size_t i 0; i [ trainImages.size(); ++i) {
cv::Mat flattened trainImages[i].reshape(1, 1);
flattened.convertTo(trainFeatures.row(i), CV_32F);
}
// Build the FLANN index
cv::flann::Index flannIndex(trainFeatures, cv::flann::KDTreeIndexParams(4));
// Prepare the query (flattened new image)
cv::Mat query newImage.reshape(1, 1);
query.convertTo(query, CV_32F);
// Perform the nearest neighbor search
cv::Mat indices, dists;
flannIndex.knnSearch(query, indices, dists, k, cv::flann::SearchParams(32));
// Majority voting
std::vector[int] votes(10, 0);
for (int i 0; i [ k; ++i) {
int idx indices.at[int](0, i);
votes[trainLabels[idx]]++;
}
// Find the predicted label and its confidence
int predictedLabel std::distance(votes.begin(), std::max_element(votes.begin(), votes.end()));
double confidence static_cast[double](votes[predictedLabel]) / k;
return {predictedLabel, confidence};
}
// Function to load training data (images and labels) into separate vectors
void loadTrainingData(const std::string& path, std::vector[cv::Mat]& trainImages, std::vector[int]& trainLabels) {
for (const auto& entry : std::filesystem::directory_iterator(path)) {
if (entry.is_directory()) {
int label std::stoi(entry.path().filename().string());
for (const auto& file : std::filesystem::directory_iterator(entry.path())) {
if (file.is_regular_file()) {
cv::Mat img cv::imread(file.path().string(), cv::IMREAD_GRAYSCALE);
if (!img.empty()) {
trainImages.push_back(img);
trainLabels.push_back(label);
} else {
std::cerr [[ "Error loading image: " [[ file.path().string() [[ std::endl;
}
}
}
}
}
}
// Main function to demonstrate classification
int main() {
std::vector[cv::Mat] trainImages;
std::vector[int] trainLabels;
std::string trainPath "C:\\data\\Mnist\\train";
loadTrainingData(trainPath, trainImages, trainLabels);
cv::Mat testImage cv::imread("C:\\data\\Mnist\\test\\7\\some_image.png", cv::IMREAD_GRAYSCALE);
if (testImage.empty()) {
std::cerr [[ "Error loading test image" [[ std::endl;
return -1;
}
int k 5; // Number of neighbors
auto [predictedLabel, confidence] classifyImageWithANN(testImage, trainImages, trainLabels, k);
std::cout [[ "Predicted label: " [[ predictedLabel [[ ", Confidence: " [[ confidence * 100 [[ "%" [[ std::endl;
return 0;
}
Прекрасная работа!
Ты прошел мой тест и будешь участвовать в наших разработках!
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 9:03
Цитата:
Egg]
Цитата:
qwerty]Что же будут теперь делать университеты? Только принимать экзамены за деньги?
Полагаю, что все (без исключения) области человеческой деятельности подвергнутся радикальному переформатированию.
И этот пример больше, чем учебный, это вполне рабочий код, хорошего джуниорского уровня. Только представьте себе, что у Вас есть какой-то задатчик, который занимается менеджментом разработки, несколько стратегий (включая альтернативные) и тысяча таких 4о-консолей, которые генерят код, обмениваются интерфейсами, закрепляют удачные архитектурные решения. Получается, фактически, немаленькая программисткая фирма, решающая прикладные проекты. То есть порог входа, как Вы отметили, в этом бизнесе тоже снижается до минимума)))
И, конечно, это полная альтернатива всем поисковикам и специализированным форумам. QA тоже может быть как сервис, поскольку 4о может объяснить чужой код, исправить ошибки, предложить оптимизацию, итд.
Придумаю хороший пример, найду час, покажу как работает 4о в отладке.
Фактически, сейчас есть только одно узкое место у LLM-технологий: активность. И это узкое место обусловлено архитектурой трансформера. Примерно понятно, что именно нужно менять и как это должно быть, но каких-то внятных решений не было даже на уровне статей.
Цитата:
Egg]Сейчас появилась о1pro, её очень хвалят, вот есть человек, который дает ей разные каверзные задачки...
[url https://x.com/goodside]https://x.com/goodside[/url]
У этой версии есть небольшой недостаток, подписка на нее стоит $200 в месяц (это без налога), это, конечно, не критически много и меньше, чем, например, суммарно мои подписки на Midjourney, OpenAI, Suno, Spotify, Netflix, Amazon, Microsoft, etc, но всё равно как-то они задрали ценовую планку))
Цитата:
Egg]
Цитата:
qwerty]Вот так с первой попытки выплюнул целый MLP на сишке, который зафурычил сразу БЕЗ ОШИБОК!!!
Да, похоже современно программирование будет начинаться не с "Hello World!" как в олдскульные ламповые времена, а с MLP или CNN))) В этой задачке очень много зависит от предобработки, выбора активационной функции и всяческих нормировок областей определений, так вот LLM в состоянии давать осмысленные рекомендации в этой части, то есть с ней можно работать даже на уровне постановки.
В такие минуты я особенно остро благодарю судьбу, что я - архитектор, а не кодер, профессия кодера, похоже, в самом деле будет полностью закрыта решениями трансформеров, но зато именно умение в архитектуру, стратегию и проектное вИдение выходит на первый план и становится важнейшим навыком))
Что касается людей с гуманитарным и философским складом ума, то они вообще стопроцентно перебираются в область пособий, безусловных доходов и прочих социальных акций подножного корма)))
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 9:05
Цитата:
Egg]
Цитата:
qwerty]Было бы интересно посмотреть различные варианты промтовой разработки боле комплексных проектов, до продуктового уровня, хотя бы mvp-шного. Чтобы по максимуму была попытка "не влезать ручками" и выяснить где и как ии-шка начинает плавать и больше вредить чем помогать.
Про это никто не покажет из-за полиси, может только русские какие. Я доходил до границ canvas, когда она писала, что ваш буффер полностью заполнен и останавливала постить код))) Сложные проекты получаются пока не очень, в какой-тро момент происходит сбой и приходится восстанавливать контекст с самого начала. Также сложные классы и наследования у меня вызвали вопросы, хотя начальное проектирование было офигенным. То есть текущее использование - небольшие функции с детально проработанным промтом. Вообще, промт очень важен.
OpenAI вчера выкатили "проекты", где вроде как можно собирать общий контекст. Очень интересно попробовать, но у меня пока не обновилось, может они выложат позже. Идея контекстного проекта с несколькими чатами - это реальное подспорье в разработке, особенно, если эти чаты можно будет как-то слойно делить на низкий и высокий уровень решений.
[
Ответ
][
Цитата
]
Egg
Сообщений: 81
На: Уголок натуралиста
Добавлено: 19 фев 25 9:08
Чел написал инструкцию по созданию сложных приложений с помощью Claude.
Перевод гуглом, ссылка на источник внизу.
"С тех пор, как Anthropic выпустил MCP, я экспериментировал с тем, чтобы Клод писал сложные программные приложения. Попытка просто создать что-то через разговор может сработать для простых вещей, но когда сложность возрастает, Клод может легко совершить ошибку или потерять цель, особенно если вы достигли предела и вам нужно начать новый разговор.
Поэтому я создал систему, которая разбивает процесс создания приложений на более мелкие части. Пока это очень успешно, и, честно говоря, я поражен тем, на что способен Клод Соннет.
Вот система, которую я использую:
Шаги:
Обсудите высокоуровневые цели проекта и составьте план проекта. Попросите Клода подвести итог и записать его в файл markdown.
Используя это резюме, обсудите аспекты более подробно в отдельных чатах, при необходимости предоставив контекстные документы. Попросите Клода подвести итог каждого разговора и записать его в отдельный файл, иначе резюме станет слишком длинным, и вы достигнете лимита сообщений.
После создания полного документа проекта обсудите минимальные требования. Попросите Клода составить список пользовательских историй и технических требований.
Обсудите высокоуровневые решения по архитектуре, включая схему базы данных, проектирование API и выбор технологического стека. Попросите Клода записать это в новый документ.
Используя список требований и документ по архитектуре, создайте подробный пошаговый подход к созданию минимально ценного продукта, по одной функции за раз.
Попросите Клода пройтись по следующему шагу и реализовать его в коде. Если у шага есть подзадачи, выполняйте по одной задаче за раз, чтобы не достичь лимита сообщений. При необходимости попросите Клода инициализировать репозиторий git и зафиксировать изменения.
После каждого шага в отдельном чате попросите Клода проверить правильность изменений и вернуться к шагу 8, если все шаги не были выполнены.
Несколько советов:
Не торопитесь. Особенно шаги 1 и 2 могут занять довольно много времени, но это того стоит. Продолжайте просить Клода задавать вам уточняющие вопросы, пока все требования не будут четко определены
Разбейте все на части, насколько это возможно. Клод гораздо лучше справляется с небольшими задачами, чем с длинными. Пока у вас есть все документы проекта, вы можете дать ему весь необходимый контекст для небольшой задачи.
Не позволяйте Клоду брать на себя управление. Клод предложит все, чего нет в плане внедрения. Не позволяйте ему делать то, чего нет в плане, просто скажите ему реализовать шаги или подзадачи шагов."
https://www.reddit.com/r/ClaudeAI/comments/1hb9f70/my_process_for_building_complex_apps_using_claude/
[
Ответ
][
Цитата
]
Стр.6 (7)
:
1
2
3
4
5
[6]
7
<<
< Пред.
|
След. >
>>
Главная
|
Материалы
|
Справочник
|
Гостевая книга
|
Форум
|
Ссылки
|
О сайте
Вопросы и замечания направляйте нам по
Copyright © 2001-2022, www.gotai.net