Добрый день, спасибо за статью. Пытаюсь добавить поддержку трансляции на телевизор в свое приложение, убил несколько дней, но не получается.
Тестовые устройства:
— Самсунг СмартТВ QLED
— Телефон Xiaomi Mi MIX 8 с Андроидом 8
— Планшет Samsung с Андроидом 7
1. Для начала я бы хотел обойтись простым MediaRouter API без необходимости встраивать в приложение ключи разработчика. Это возможно вообще? Чем отличаются «wireless display» от «chrome cast device» на диаграмме? Для работы с хром-каст устройствами нужен ключ разработчика, а для беспроводных дисплеев нет?
2. Телевизор Самсунг определяется как «Беспроводной дисплей» (TV Samsung Q9 Series (65)) и я могу подключиться к нему через настройки смартфона и транслировать на него экран телефона целиком.
— На планшете такой системной настройки нет, но я могу подключиться к нему из приложения YouTube Kids.
3. Встроил в приложение кнопку androidx.mediarouter.app.MediaRouteButton (и еще добавил в меню)
— в меню она просто не появляется, в варианте MediaRouteButton отображается неактивной
— mediaRouter.getRoutes() возвращает один рут (который default route и он не телевизор)
— вызываю mediaRouteBtn.showDialog() по другой кнопке, появляется диалог выбора устройства для трансляции и в нем телевизора нет (в диалоге крутится прогресс с поиском и никогда не заканчивается).
4. Но! Если на телефоне я подключаюсь к дисплею через системные настройки, кнопка становится активной и появляется та, которую я добавлял в меню! В списке mediaRouter.getRoutes() появляется еще один путь — этот самый телевизор. При этом если вызвать диалог mediaRouteBtn.showDialog(), то там видно подключенный телевизор и есть опция отключиться от него. Одна проблема — нафига она нужна, если я и так уже подключен к дисплею.
— На планшете глобального способа подключиться к телевизору не нашел, поэтому на нем такой вариант не работает.
> Creators know their content best, and should set the designation themselves.
> We also use machine learning to help us identify this content,
> Many creators around the world have created quality kids content for their audiences, and these changes will have significant impact.
> We’re committed to helping creators navigate this new landscape and to supporting our ecosystem of family content.
На то, чтобы разобраться, весной довольно плотно обложившись книгами потратил полтора-два месяца (перед этим еще года два эпизодически неплотно заходил на тему, не вникая в суть происходящего — например, запускал примеры из интернета с обучением сетки на MNIST). Тогда же подготовил слайды для лекций с основной канвой повествования. На статью сейчас потратил примерно месяц (не каждый день, по паре-тройке часов по вечерам), большая часть времени ушла на перерисовку картинок (вскрылось множество мелких неточностей или опечаток, что можно быстро пролистать на лекции, в статье уже оставлять нельзя), анимацию и на войну с MayAvi последнюю неделю. Когда картинки есть и стоят в нужном порядке, текст уже идет сам.
По производной сначала тоже хотел оттолкнуться от тангенса (это важно для понимания дальнейших телодвижений), предварительно дав ссылку, например, на этот ролик: www.youtube.com/watch?v=OniFjwZ3b00. Но когда все остальное было готово, решил, что гулять, так гулять, и сделал всё целиком.
Книги порекомендую две основные упомянутые: С. Николенко, Глубокое обучение, погружение в мир нейронных сетей и Себастьян Рашка, Python и машинное обучение.
Обе, в общем, маст хэв.
Есть еще Тарик Рашид, Создаем нейронную сеть. Тоже, в целом, неплохая, он концентрируется именно на сетках и пытается жевать их с азов и с самого начала, но местами уходит в другую крайность и слишком упрощает, при этом, некоторые вещи, которые мне для понимания были важны, он тоже упустил.
Вывод формул я почти полностью взял из Рашида, сверив с Николенко. Николенко для реализации первой сетки почти сразу после пояснений про ошибки и производные берет тензор-флоу.
Но, блин, ни по одной из книг я не мог до конца врубиться в то, что происходит хотя бы и с одним нейроном, пока сам все не сделал по шагам. Например, чел, выводит несколько страниц формул, все последовательно и логично, а потом бац — все объяснение градиентного спуска — плоская парабола со стрелочками (откуда она там взялась — не очень понятно, только что была куча формул, а к этой параболе нифига нет), и потом сразу цветки ирисов на плоскости, разделенные прямой (я пока не построил графики активации, не мог понять из текста, что там в этот промежуточный волшебный момент происходит, и что это прямая — никакая не прямая, а на самом деле плоскость в 3д).
Последнее пока не получилось, там, похоже, включаются какие-то граничные условия, но зато стало понятно, почему у нейронов должна быть нелинейная активация и почему с линейной ничего не выдет.
Код здесь приведен в учебных целях для наглядности. Для практических применений лучше взять какую-нибудь готовую библиотеку с реализацией нейросетки, должно быть что-то и для JS.
Если хотите строить на JS такие же графики, то не знаю, возможно и для JS есть что-то подобное, но, вообще, именно за такие графики и манипулирование многомерными массивами многие любят как раз Пайтон.
Да, перцептроном Розенблатта обычно называют многослойную структуру с нелинейной активацией, но в литературе, когда начинают рассказывать про нейросетки, повсеместно говорят об однослойном перцептроне, который по сути есть единичный нейрон.
О, так вы все-таки соизволили форкнуть ртос, авторов которого поливаете у себя в фб, а теперь выдаете их работу за образчик профессионализма команды Unwired Devices? Спасибо, хоть исходники не зажали, бэгэгэ
вы правы, формально битность архитектуры определяют по битности регистров, которые в AVR 8 бит, хотя адреса, команды и арифметика у нее по большей части 16-битные. Подумаю, как лучше поправить, чтобы не вводить людей в заблуждение, но и не запутать при этом
Скажем так, я знаю, что такое интегрированная среда разработки с автоформатированием, автодополнением, всплывающей документацией при наведенении мышки на вызов, переходом по клику к исходнику любой системной функции, деревьями проектов, автоматическим рефактором, отладчиком с условными точками останова, профайлером памяти в реальном времени и т.п. При разработке на Java этого добра хватает на разный вкус в не одном варианте. При этом видел разработчиков, которые, если у них выдернуть из-под ног всю эту красоту, начинают теряться, вставать в ступор и протестовать примерно, как офисные барышни, у которых в новом офисе все кнопочки не на своем месте (по моим наблюдениям это в большей степени относится к пользователям как раз МС Вижуалстудии, чем к жабщикам, возможно, потому, что жабщики привыкли от проекта к проекту прыгать между Эклипсом, Нетбинзом и Идеей, а у МС среда единственная и неповторимая на все времена).
Это я к тому, что если очень хочется, то можно и IDE настроить, не вижу в этом ничего плохого, а если нет под рукой IDE, то и текстовый редактор + make + gcc в консольке — нормальный инструмент, ничем не хуже, местами лучше (спросите емаксера или вимера, что он думает о редакторе вижуалстудии или эклипса). Можно обсуждать их удобства и преимущества для разных ситуаций, но никак не повод кичиться, тем более сводить целую платформу с развесистой экосистемой к убогому текстовому редактору.
Тестовые устройства:
— Самсунг СмартТВ QLED
— Телефон Xiaomi Mi MIX 8 с Андроидом 8
— Планшет Samsung с Андроидом 7
1. Для начала я бы хотел обойтись простым MediaRouter API без необходимости встраивать в приложение ключи разработчика. Это возможно вообще? Чем отличаются «wireless display» от «chrome cast device» на диаграмме? Для работы с хром-каст устройствами нужен ключ разработчика, а для беспроводных дисплеев нет?
2. Телевизор Самсунг определяется как «Беспроводной дисплей» (TV Samsung Q9 Series (65)) и я могу подключиться к нему через настройки смартфона и транслировать на него экран телефона целиком.
— На планшете такой системной настройки нет, но я могу подключиться к нему из приложения YouTube Kids.
3. Встроил в приложение кнопку androidx.mediarouter.app.MediaRouteButton (и еще добавил в меню)
— в меню она просто не появляется, в варианте MediaRouteButton отображается неактивной
— mediaRouter.getRoutes() возвращает один рут (который default route и он не телевизор)
— вызываю mediaRouteBtn.showDialog() по другой кнопке, появляется диалог выбора устройства для трансляции и в нем телевизора нет (в диалоге крутится прогресс с поиском и никогда не заканчивается).
4. Но! Если на телефоне я подключаюсь к дисплею через системные настройки, кнопка становится активной и появляется та, которую я добавлял в меню! В списке mediaRouter.getRoutes() появляется еще один путь — этот самый телевизор. При этом если вызвать диалог mediaRouteBtn.showDialog(), то там видно подключенный телевизор и есть опция отключиться от него. Одна проблема — нафига она нужна, если я и так уже подключен к дисплею.
— На планшете глобального способа подключиться к телевизору не нашел, поэтому на нем такой вариант не работает.
Попоробовал еще поставить тестовое приложение отсюда:
codelabs.developers.google.com/codelabs/cast-videos-android/index.html?index=..%2F..index#2
Не показывает кнопку ни на смартфоне, ни на планшете.
speakerdeck.com/sadr0b0t/bol-shiie-dannyie-liektsiia11-loghistichieskaia-rieghriessiia-ghradiientnyi-spusk-s-sighmoidoi
и про обучение сети из 3-х нейронов (в этом году получилось ее обучить — в прошлом году была ошибка в коде)
speakerdeck.com/sadr0b0t/bol-shiie-dannyie-liektsiia12-mnoghosloinyi-piertsieptron-mnoghomiernyi-ghradiient-obratnoie-rasprostranieniie
И про TensorFlow есть вариант видео-лекция (слайды пока не выложил):
vk.com/video?z=video53223390_456239477%2Fpl_cat_updates
они, правда, теперь там старый АПИ прячут в обертку Keras в новых версиях, поэтому планирую дальше переходить на PyTorch
> Creators know their content best, and should set the designation themselves.
> We also use machine learning to help us identify this content,
> Many creators around the world have created quality kids content for their audiences, and these changes will have significant impact.
> We’re committed to helping creators navigate this new landscape and to supporting our ecosystem of family content.
совершенно не про то
По производной сначала тоже хотел оттолкнуться от тангенса (это важно для понимания дальнейших телодвижений), предварительно дав ссылку, например, на этот ролик: www.youtube.com/watch?v=OniFjwZ3b00. Но когда все остальное было готово, решил, что гулять, так гулять, и сделал всё целиком.
Книги порекомендую две основные упомянутые: С. Николенко, Глубокое обучение, погружение в мир нейронных сетей и Себастьян Рашка, Python и машинное обучение.
Обе, в общем, маст хэв.
Есть еще Тарик Рашид, Создаем нейронную сеть. Тоже, в целом, неплохая, он концентрируется именно на сетках и пытается жевать их с азов и с самого начала, но местами уходит в другую крайность и слишком упрощает, при этом, некоторые вещи, которые мне для понимания были важны, он тоже упустил.
Вывод формул я почти полностью взял из Рашида, сверив с Николенко. Николенко для реализации первой сетки почти сразу после пояснений про ошибки и производные берет тензор-флоу.
Но, блин, ни по одной из книг я не мог до конца врубиться в то, что происходит хотя бы и с одним нейроном, пока сам все не сделал по шагам. Например, чел, выводит несколько страниц формул, все последовательно и логично, а потом бац — все объяснение градиентного спуска — плоская парабола со стрелочками (откуда она там взялась — не очень понятно, только что была куча формул, а к этой параболе нифига нет), и потом сразу цветки ирисов на плоскости, разделенные прямой (я пока не построил графики активации, не мог понять из текста, что там в этот промежуточный волшебный момент происходит, и что это прямая — никакая не прямая, а на самом деле плоскость в 3д).
В качестве продолжения рекомендую еще полистать мои слайды
Нейрон с сигмоидой (планирую конвертировать в такую же статью):
speakerdeck.com/sadr0b0t/bol-shiie-dannyie-liektsiia11-loghistichieskaia-rieghriessiia-ghradiientnyi-spusk-s-sighmoidoi
И, наконец, попытка объединить нейроны в сеть и обучить ее в таком же ручном режиме:
speakerdeck.com/sadr0b0t/bol-shiie-dannyie-liektsiia12-mnoghosloinyi-piertsieptron-mnoghomiernyi-ghradiient-obratnoie-rasprostranieniie
Последнее пока не получилось, там, похоже, включаются какие-то граничные условия, но зато стало понятно, почему у нейронов должна быть нелинейная активация и почему с линейной ничего не выдет.
Если хотите строить на JS такие же графики, то не знаю, возможно и для JS есть что-то подобное, но, вообще, именно за такие графики и манипулирование многомерными массивами многие любят как раз Пайтон.
О, так вы все-таки соизволили форкнуть ртос, авторов которого поливаете у себя в фб, а теперь выдаете их работу за образчик профессионализма команды Unwired Devices? Спасибо, хоть исходники не зажали, бэгэгэ
да пишите сразу 4-битный, чего уж там
Она умеет запускать код, написанный на Си/С++, скомпилированный с gcc, для меня этого достаточно
Это я к тому, что если очень хочется, то можно и IDE настроить, не вижу в этом ничего плохого, а если нет под рукой IDE, то и текстовый редактор + make + gcc в консольке — нормальный инструмент, ничем не хуже, местами лучше (спросите емаксера или вимера, что он думает о редакторе вижуалстудии или эклипса). Можно обсуждать их удобства и преимущества для разных ситуаций, но никак не повод кичиться, тем более сводить целую платформу с развесистой экосистемой к убогому текстовому редактору.
и то и другое
не знаю, если туда можно загружать сторонние библиотеки, то может быть
в меньшей степени, как один из примеров
золотые слова!
www.multitran.ru/c/m.exe?CL=1&s=mockup
www.multitran.ru/c/m.exe?l1=1&l2=2&s=mock