All streams
Search
Write a publication
Pull to refresh
204
0
Олег Черний @apelsyn

AI&ML Teach Lead

Send message

Есть модуль koa-connect или koa-express. Оба позволяют подключать модули от express. Они спроектированы для версии koa 1.0 но через koa-convert можно подключить к Koa2, если есть такая необходимость. Правда не 100% експресовских middleware будут работать по такой схеме, т.к. в Koa некоторые объекты могут называться по-другому.


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


По сравнению с koa у любого callbeck-style фреймворка (не только express) есть слабое место в обработке ошибок. Даже если вы в своем коде сделали все правильно, то ошибка может возникнуть во внешнем модуле и, как итог, ваш процесс падает, конечно там есть решение через домены, но они уж точно не добавляют красоты и наглядности вашему приложению. У koa такой проблемы нет, вы можете отлавливать все через try/catch как при работе сихронного кода, как показано в примере статьи. На koa уронить процесс значительно труднее, даже если вы сами не обработаете исключение, его обработает koa и не упадет.

Если я правильно понял, вы хотете сказать что организация ECMA собирается добавить в стандарт "костыли"? Звучит это как-то, мягко говоря, не убедительно. Откуда вы знаете, что с какой скоростью будет реализовано?


В Koa используется async/await, я Вам его не навязываю, просто рассказваю о фреймворке. Вам нравиться модуль Fibers? Я против него ничего не имею — используйте.

async/await это то что через год станет частью JavaScript, остальные уровни не из нашей игры :)

Это хороший фреймворк — на нем создавались самые первые версии микросервисов нашей компании, мы использовали его совместно с модулем async. Некоторые из этих сервисов по сей день обслуживают ненагруженную часть сайта, которую мы еще не успели переписать. Но это CallBack-style фреймворк и они с Koa находятся в разных весовых категориях.

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


У вас будет шикарный фундамент, и выбор middleware для реализации роутинга, шаблонизации, сесии и т.д. Про некоторые полезные middleware я напишу во второй части.

Я еще раз потренировал модель на полной 60 000 выборке, прогнал тестовую выборку (10 000 записей) и получил 1,77% погрешность. Это средний показатель, если смотреть таблицу на сайте MNIST.

Не уверен что это задача для JavaScript. При распознавании изображений во входном слое будет очень много нейронов, а nodejs и др. реализации js однопоточные. (Это означает что в один момент времени будет задействовано только одно ядро). Но натренированную модель для классификации фото загрузить в js реально.

Я не проганял, после выходных отпишу.

мы взяли библиотеку, написанную умными людьми,

А вы что в машинных кодах модели тренируете, или калькулятор предпочитаете? Я рассказал о хорошем инструменте для JavaScript.


подключили и решили игрушечную задачу.

Отличная задача для начинающих, простая и наглядная.

А смысл в подобных знаниях на обезьяньем уровне? Ну т.е. на MNIST'е оно работает, а на более сложных задачах почти наверняка возникает масса проблем при тренировке, которые даже продиагностировать нельзя без понимания того, что находится под капотом у tran'а...

В статье достаточно информации для того чтоб заинтересовать человека, который никогда с этим не сталкивался. Ну Вам не угодил, — бывает.

>JS таки заметно быстрее чем py
Есть ли под JS либы с jit-компиляцией? Обычно используют theano+[lasagne|keras] либо torch, caffe, tensorflow. Чем определен выбор JS?


Если этот вопрос ко мне, то мне просто нравиться JavaScript.

Ладно, на самом деле в статье обычный пример обучения. Просто самого содержания статьи нету. Нейронные сети — это не про программирование, это про машинное обучение и deep learning. Это про то, что скрывается за net.train(). А тут в статье даже слова градиент нету.


Да, нету. Нейронные сети это инструмент для решения некоторого класса задач и не всегда разработчику JavaScript нужно хорошо разбираться в том как реализован net.train(), достаточно знать что ему подавать на входы и что будем иметь на выходе.

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

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


Очень оригинально.

>В качестве функции f(x) чаще всего используется сигмоидная или пороговая функции
Пороговая функция в качестве функции активации использоваться не может, потому что, внезапно, ее производная не равна нулю на множестве меры 0. Тут скорее надо упомянуть тангенциальную функцию, rectifier, leaky rectifier.


Вы начали искать изъяны в теории? У вас минусовая карма, так вы троль, что ли?
Я понял — это баг. Уже пофиксил.
Да вот такие они загадочные эти нейронные сети. Если нейронов мало — сеть «тупая», если нейронов много — сеть «зубрилка». Там автор в скрытом слое указал 200 нейронов c одинарной точностью (движок brain.js создал 392 нейрона с двойной точностью ). Для понятности и красоты модели используется JSON.stingify с отступами. Ну и формат серилизации у brain.js попрожористее.

Точность распознавания визуально оценивать сложно. Измерить можно на выборке для тестирования из базы MNIST. Там 10000 тестовых примеров. Я таких замеров не проделывал, т.к. для демонстации работы сети, того что я сделал — достаточно.
Да, вы правы, я добавил в теоретическую часть Вашу ссылку
Да, это хороший пример. Стоит отметить что в этом примере модель обучалась с помощью Matlab (это указано автором в коментариях). Это уже не чистый JavaScript.
Я Вас понял, сегодня вечером пофикшу этот баг, повторно распознавать нету никакого смысла.
Для демонстрации того что есть достаточно, а на усложнение этого кода у меня нету времени.

Вы можете клонировать код на гитхаб и предложить свою реализацию, давайте вместе делать код лучше!
Уточните суть проблемы, там могут быть проблемы с выделением памяти, т.к. загружается код размером 11M. Оновная часть кода сериализированная натренированная модель.
Это статья для начинающих. Упор на простоту. В идеале читатель загружает код и пробует у себя на компе тренировать сеть самомтоятельно. То о чем пишете вы — это усложнение задачи. Но идея интересная.
Да так и есть, иногда путает 1 и 7-ку. Надо увеличивать обучающую выборку. В идеале прогнать через сеть все 60 000 примеров + ваши с правильным ответом. У меня на это не хватило терпения. :)

Information

Rating
Does not participate
Location
Винница, Винницкая обл., Украина
Date of birth
Registered
Activity