Обновить
9
0

Пользователь

Отправить сообщение

Вроде бы после фильтра 45 градусов остаётся 71% от амплитуды падающего поля, а интенсивность уменьшается вдвое. Т.е. после 3х фильтров остаётся 25% от интенсивности, а не 50%.

Большое количество точек взял для повышения точности интегрирования.

Эксперименты показали малую зависимость результатов от количества слоев в нейронной сети. Поэтому здесь ограничился одним скрытым слоем.

Для запуска в колабе возможно потребуется гугловский аккаунт.

Исправил оплошность: сейчас должно быть доступно по ссылке. Гугл - не Яндекс - требует дополнительных действий)

По первому пункту набросал небольшой "ноутбук" для colab от google, который можно запустить в браузере (вычисления производятся на серверах гугла). Ссылка на код https://colab.research.google.com/drive/1RH24-xTl8F739eWMCGfKQCQzuRaz96kT?usp=drive_link При запуске выбирете вычисление на видеокарте посредством изменения настроек Runtime/Change Runtime Type/ T4 GPU

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

В качестве иллюстрации я привёл зависимости первой, второй и трётьей производных решения от r.

Комментарии по коду.

  1. Использовать pytorch и брать производные через численную схему (self.calc_diff(f) / self.hx), по моему крайне неэффективно. Попробуйте использовать встроенные методы алгоритмического взятия производных (torch.autograd), точность которых соответствует точности аналитических методов.

  2. "Для расчета более сложных скирмионов, размерность сетки будет многомерной и время вычисления при той же точности возрастет на несколько порядков". Используйте бессеточные методы решения дифференциальных уравнений, у которых вычислительные затраты пропорциональны N*d (а не N^d в случае сеточных методов). Здесь N - количество исследуемых точек, d - размерность пространства.

Нет, не получилось. После неудачных попыток поспользоваться реформером перешёл на перформер.

Попытки использовать Reformer в качестве основы для модели sequence-to-sequence для перевода или предсказывания последовательностей не приводят к какому-либо существенному улучшению по сравнению с традиционными трансформерами. Видимо поэтому сами авторы Reformer(а) не приводят пример реализации sequence-to-sequence.

Colab-ноутбук демонстрации обработки «Преступления и наказания» нерабочий:

в конце 7го блока кода необходимо писать my_inputs(trax.fastmath.ops.local_device_count() вместо my_inputs(trax.fastmath.device_count(); в восьмом блоке должно быть ReformerLM.pos_axial_shape = (512, 1024) ReformerLM.pos_d_axial_embs= (64, 192) вместо ReformerLM.axial_pos_shape = (512, 1024) ReformerLM.d_axial_pos_embs= (64, 192); выполнение 11го и 12го блоков прерываются ошибкой "RuntimeError: Resource exhausted: Ran out of memory in memory space hbm. Used 8.73G of 8.00G hbm. Exceeded hbm capacity by 745.30M". С наскока вменяемый результат получить не удалось.

"Возможно, читателям этой статьи удастся найти новое применение Reformer'а." Если Reformer превратиться в рабочий инструмент, то его можно будет применять, например, в криминалистике для восстановления внешнего вида человека по ДНК.

Обычно self-attention на русский язык переводится как "внутреннее внимание", а не "самовнимание" (хотя гугл-переводчик "генерирует" такой перевод вместо нормального)). Этот термин пришёл из когнитивистики; синоним "субъективному вниманию".

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность