Как изменить и удалить объявление на Юле? Как изменить фото, цену на Юле?
Дата публикации: 10.01.2021
Благодаря использованию таких интернет-площадок, как «Юла», удается успешно реализовывать товары и находить заказчиков для предоставления им услуг. При этом собственных магазинов создавать не нужно.
Потребуются только:
- размещение записи;
- загрузка изображения;
- указание наименования;
- установление цены.
Если пользователю потребуется, он в любой момент сможет изменить первоначальные данные. Но чтобы произвести изменения, нужно разобраться, как отредактировать на Юле свое объявление.
Также здесь поясняется, каким способом информацию удаляют.
Как изменить объявление на Юле?
На сайте Юла отредактировать запись может только авторизованный пользователь. Открывается вход в личный кабинет тем, кто укажет пароль и логин. Также можно войти через аккаунт, если имеется регистрация в какой-либо социальной сети.
Вход и регистрация на сайте Юла.
Необходимо зайти на главную страницу кабинета и там найти изображение аккаунта. Потребуется кликнуть на него. А дальше нужно будет поочередно:
На ней любые данные, введенные раньше, могут быть заменены. Это:
- описание;
- размер;
- фото;
- цена.
Как изменить главное фото на Юле?
Для изменения главного фото объявления потребуется перейти на страницу, подлежащую редактированию. Там выбирается строка «Фотография». Можно вставить то изображение, что имеется в папке на компьютере. Нужно иметь минимум 1 фотографию.
Добавление и изменение фотографий товара на сайте Юла.
Как ускорить продажу товара (услуги) на Юле?
Выбирается любой тариф из предлагаемых. Его оплата производится:
- со счёта мобильника;
- путем использования банковской карты.
Подобное продвижение продолжает действовать на протяжении 7-ми дней. В этот период невозможно изменить тарифный план.
Пользователю разрешается размещать 5 объявлений бесплатно. Если их больше, за остальные придется заплатить. Сервис Юла предлагает пакеты записей при внесении фиксированной платы.
Как поменять цену на Юле в объявлении?
Допускается изменение на Юле стоимости товара в окне «Редактирование». Переход в него возможен по той схеме, что уже была описана ранее.
Поле с категорией «Цена» подлежит обязательному заполнению. Поэтому его отмечают красной звёздочкой.
Чтобы изменить стоимость, достаточно установить курсор в той строке, где указываются цифры. А после внесения нового показателя цены нажимают кнопку «Опубликовать».
Как изменить аватарку в профиле на Юле?
Есть возможность сменить в личном кабинете и фото профиля. Потребуется поочередно произвести:
- переход в «Настройки»;
- выбор пункта «Фотография»;
- нажатие на «Загрузить»;
- предварительный подбор фотографии с последующим нажатием на «Сохранить».
Редактирование профиля на Юле.
Редактирование фотографии пользователя на Юле.
Теперь пользователю становится доступно загружать или собственные изображения, или логотип своей организации.
Потребуется учесть! Выставлять на аватар изображения, что обработаны в графических редакторах с нанесением рекламной, контактной информации, водяных знаков, не нужно.
Чтобы начать редактирование избранного объявления, достаточно произвести нажатие на кнопку «Редактировать».
Как изменить имя профиля на Юле?
Потенциальному покупателю, изучающему объявление, при переходе открывается информация о продавце и его товаре. Может возникнуть потребность в замене имени профиля, тогда производят такие поочередные действия.
- Во-первых, нажимают на иконку профиля.
- Во-вторых, выбирают пункт «Настройки».
- В-третьих, кликают по опции «Изменить» (строка «Профиль»).
- В-четвертых, пишут название фирмы или новое имя.
- В-пятых, сохраняют исправления.
На заметку. Можно изменить наименование записи, если открыть меню редактирования. В определенную строки вписывают название объёмом максимум в 50 символов.
Как снять / отключить объявление на Юле?
В поиске сайта запись о товаре предъявляется на протяжении 30-ти дней. Отсчет времени ведется с момента ее размещения. Тогда же продавцу доступно снять объявление.
Отключение объявления на Юле.
Нужно произвести такие действия.
- Объявление выявляется в разделе «Продаю».
- Производится нажатие на знак, где изображены 3 точки.
- После нажатия открывается меню. Там имеется вариация «Снять с публикации». Предлагаются на выбор основные причины таких действий, одну из которых требуется указать.
Выбор причины снятия объявления на Юле.
«Я продал на Юле». Производится перевод записи в категорию «Продано». Тогда же можно:
- обозначить покупателя;
- оценить надежность этого лица, как контрагента.
«Я продал в другом месте». В этом случае товар тоже будет переведен в категорию «Продано». При этом оценивать покупателя пользователю не придется.
«Другая причина». При задействовании этого варианта объявление переводится в архив. Оно обретает статус «Неактивно».
Если продавец использует любой из первых двух обозначенных вариантов, он теряет возможность переносить запись в активную категорию «Продаю». Тогда от него потребуется вновь создавать фотографии и наново размещать их.
Как удалить объявление на Юле?
Запись о товаре уже снята с публикации, система переместила ее в архив. Тогда более невостребованные данные можно удалить. С этой целью используют:
- или приложение на смартфоне;
- или официальный сайт, что открывается на ноутбуке, компьютере.
К сведению. Если запись окажется удалена, впоследствии ее невозможно будет восстановить.
Удаление объявления на Юле через телефон.
- Сперва загружают Юлу и проходят авторизацию.
- Внизу страницы проявляется значок «Мой профиль», как раз на него и потребуется нажать.
- Тогда будут предъявлены активные объявления.
- При необходимости удаления информации из указанной категории приходится для снятия записи с публикации произвести определенные действия.
Удаляемое объявление будет представлено в разделе «Архив». Пользователь переходит в этот раздел и нажимает на кнопку «Меню» (она вверху). Выбирается вариант «Удалить». При этом потребуется подтвердить свои действия.
Удаление объявления на Юле через компьютер.
- От пользователя потребуется посетить свой личный кабинет.
- Для этого он нажимает на «Профиль».
- Появляется окно. В нем нужно нажать на вкладку «Мои объявления».
- Выбирается ненужное объявление. Потребуется кликнуть на «Удалить» (кнопка над записью). А если убирается объявление о недвижимости, тогда кнопка, на которую потребуется нажать, будет располагаться внизу.
- Указывается причина удаления.
- Дальше появляется окно с предупреждением. Его следует проигнорировать. Пользователь подтверждает свои прежние действия нажатием «Удалить».
[сообщение в блоге] Создайте собственную рекламу с Джулией за ОДИН день — Сообщество
Джулия Язык программированияРоджер-луо
1
Мне было интересно, насколько легко и просто можно реализовать простой прямой AD (реверсивный режим) для машинного обучения и квантовой физики в Julia.
И ответ составляет всего около 200~400 строк (включая строки документов), вы можете получить AD с базовой функцией, определенной в DiffRules
и широковещательная поддержка с разумной производительностью (на самом деле это, возможно, самый быстрый на данный момент XD).
Проверьте это здесь: http://blog.rogerluo.me/2018/10/23/write-an-ad-in-one-day/
21 лайк
сяодай
2
Как долго вы думаете, что он достигнет паритета функций с факелом? Кроме того, исходя из этого опыта, видите ли вы, что в какой-то момент полностью переключитесь на Джулию? Как насчет практиков, которым неудобно писать свою собственную рекламу? Какой машинный пакет вы бы посоветовали им изучить? PyTorch или какой-то пакет Julia?
Роджер-луо
3
сяодай:
Как вы думаете, через какое время он достигнет паритета характеристик с факелом?
Это будет зависеть от количества участников, я не буду реализовывать то, что мне совершенно не нужно в данный момент (например, поддержку нескольких графических процессоров для conv и RNN-модулей). PyTorch на самом деле очень похож на Chainer, но у PyTorch более активное сообщество.
сяодай:
Кроме того, основываясь на этом опыте, можете ли вы в какой-то момент полностью переключиться на Джулию?
Я физик, занимаюсь машинным обучением, а это значит, что иногда людей в сообществе машинного обучения не волнует, что нам нужно, и мы должны реализовать это сами, например, поддержку комплексных чисел, это займет довольно много времени (может лет) для слияния новых вещей в главное дерево большого проекта вроде PyTorch. Это болезненно и на самом деле не нужно исследователям, проверьте проблему и прогресс здесь:
https://github.com/pytorch/pytorch/issues/755
https://github.com/Roger-luo/pytorch-complex
Я все еще работаю над этим из-за наших устаревших зависимостей в лаборатория, однако, я лично со своими лаборантами-коллаборантами полностью перешел на Джулию, я собрал несколько пакетов, которые мне нужны для исследований:
https://github.com/Roger-luo/Lattices.jl
https://github.com/Roger-luo/QuHamiltonian.jl
https://github.com/Roger-luo/LatticeSites.jl
https://github.com/QuantumBFS/Yao.jl
И многое другое в привате.
Некоторые из них (например, QuHamiltonian.jl) не совсем возможно реализовать на Python (или это было бы довольно сложно с модулем ast). Большинство пакетов Python, которые мы пишем на данный момент, предназначены только для публики и непрофессионалов, которые вообще не заинтересованы в программировании. Это кошмар по сравнению с Джулией связывать C++ с Python, даже если есть pybind11
.
Кроме того, у Джулии лучших поддерживает тензорные сети среди всех языков, у Python есть только тензорная оболочка i. Но у Джулии есть TensorOperations.jl и еще один готовящийся пакет Jutho, и автор iTensor также пишет его версию для Джулии.
сяодай:
Как насчет практиков, которые не умеют писать свои собственные объявления?
На самом деле я пишу этот пакет AD из-за практической проблемы, недавняя модель, реализованная в PyTorch, слишком медленная, и я не могу использовать пакетную трассировку в PyTorch, потому что у нее нет (я не хочу писать расширение C++, и даже я написал один, он все еще может быть медленнее из-за оболочки python), и я не могу просто использовать цикл for в Python, потому что он тоже медленный, и библиотеки решетки тоже медленные в Python. Я ускоряю свою собственную модель примерно в 10 раз быстрее (на процессоре) по сравнению с PyTorch (с почти таким же синтаксисом) всего за несколько дней.
И я не могу просто полностью перенести Jutho TensorOperations.jl на Python, метапрограммирование на Python по сравнению с тем, что мы хотим в TensorOperations.jl, не представляется возможным реализовать (или вы создадите свой собственный DSL под Python, как и многие другие пакеты Python). делать).
Если вы действительно «практик», в этой ситуации, я думаю, вы выберете Джулию (если вы не хотите писать свой собственный, добавьте собственный оператор в Zygote.jl быстрее, чем PyTorch на процессоре, и вы можете используйте мой в будущем), вместо того, чтобы писать собственное расширение PyTorch C++ с его интерфейсом C++.
Быть Практиком не повод лениться: если есть достаточно хороший пакет, то используйте его, если нет, то пишите.
сяодай:
Какой пакет машин вы бы посоветовали им изучить?
Но хорошо, если кто-то просто скажет, что я не хочу изучать какую-либо теорию, я просто хочу вызвать функцию, а затем запустить с ней новый алгоритм глубокого обучения. Тогда вам, вероятно, понадобится машина времени и компьютер с черной дырой.
сяодай:
PyTorch или какой-то пакет Julia?
Я могу использовать Flux.jl/Knet.jl/PyTorch/TensorFlow или просто писать с нуля, если я нахожу один из подходов самым быстрым. На самом деле я не вижу большой разницы между этими пакетами, сейчас люди делают похожие интерфейсы с разной реализацией.
3 лайка
Tamas_Papp
4
Спасибо за интересный и хорошо написанный пост в блоге. Реализация AD действительно является хорошим примером использования возможностей языка.
Однако мне интересно, не слишком ли у нас много хорошего, так как на данный момент существует по крайней мере 5 библиотек AD с обратным режимом, которые находятся на разных стадиях экспериментального развития, минимально поддерживаемые, ожидая, пока экспериментальная станет пригодной для использования. в производстве, ориентируясь на конкретные варианты использования/сообщества (например, машинное обучение) или догоняя до 0,7/1,0 (они не являются исключительными). Насколько я знаю, все они имеют нерешенные ошибки, которые требуют некоторого компромисса или дополнительной работы со стороны пользователя.
Человек со стороны, глядя на ландшафт AD с реверсивным режимом в Julia, может задаться вопросом, что заставляет людей писать для этого еще одну библиотеку и отражает ли это проблему с языком.
9 лайков
23 октября 2018 г., 11:21
5
Кстати, недавно я наткнулся на этот манифест для AD в Swift: https://gist.github.com/rxwei/30ba75ce092ab3b0dce4bde1fc2c9.f1d
Я не очень хорошо разбираюсь в AD, но мне было интересно, какие из этих амбициозных задач можно решить (или уже решить?) в рамках экосистемы Julia или они вообще находятся на радаре. Или есть ли что-то, что стремился сделать Swifter, что могло бы создать проблемы для Джулии?
(если это слишком не по теме, могу создать отдельную тему)
Roger-luo
6
Да, в Джулии разрабатывается много пакетов AD. И, как вы сказали, мне нужна была простая и прямолинейная реклама для практического использования.
Тем не менее, я не думаю, что это отражает проблему языка, но отражает его преимущество: изо всех сил пытаясь научиться добавлять новый оператор в C++, можно написать быструю и удобную AD всего несколькими строками в Юлия.
Другие пакеты AD в Julia преследуют другие цели, например, Zygote стремится предоставить AD с исходным кодом 2 путем расширения компилятора, это определенно лучше и сложнее реализовать.
Более старый, но более зрелый: AutoGrad, который унаследовал свою версию Python, работает так же медленно, как и его версия Python, поскольку он написан не очень юлианским способом (например, некоторые типы не являются параметрическими, что не предполагает производительность подсказки), и вам нужно будет генерировать производные с помощью примитивного макроса, что лично я не предпочитаю. Но он находится на рефакторинге.
И некоторые другие попытки реализовать source 2 source AD с помощью макросов или перегрузки (фактически множественная отправка через трейты).
Но да, как вы сказали, мы, вероятно, хотим что-то удобное и простое для пользователя: и это, вероятно, то, что YAAD собирается делать дальше. Поскольку он крошечный, будет нетрудно исправить будущие ошибки. И поскольку он использует множественную диспетчеризацию, его можно легко расширить, определив только один или два метода. И поскольку он пытается имитировать интерфейс популярного пакета PyTorch (хотя и не может имитировать тензор версии 0.4), переключиться на него не составит труда, пока мы ждем более многообещающих пакетов, таких как Zygote и Capstan, мы могли бы просто использовать это первое.
Я считаю, что не только в AD, но и в других областях можно использовать Julia для реализации чего-то крошечного, но полезного.
ИНС напишу позже, когда добавлю в YAAD больше операторов.
Роджер-луо
7
Это обсуждалось в slack. На самом деле я не думаю, что нам нужно менять язык, чтобы адаптировать AD.
Эти кассеты на основе AD в Джулии будут напрямую расширять компилятор, чтобы иметь возможность маркировать и различать выражения без настройки языка. Превращение AD в первоклассный продукт может укусить тех, кому он на самом деле не нужен.
2 лайков
23 октября 2018 г., 15:42
8
Тамас_Папп:
Однако мне интересно, не слишком ли у нас много хорошего, так как на данный момент существует по крайней мере 5 библиотек AD с обратным режимом, которые находятся на разных стадиях экспериментального развития, минимально поддерживаются, ожидая, пока экспериментальная будет пригодна для использования в производство, нацеленное на конкретные варианты использования/сообщества (например, машинное обучение) или догоняющее до 0,7/1,0 (они не являются исключительными). Насколько я знаю, все они имеют нерешенные ошибки, которые требуют некоторого компромисса или дополнительной работы со стороны пользователя. Как вы показали, Julia позволяет легко написать минимальную библиотеку AD; трудная часть состоит в том, чтобы поддерживать ту, которая является надежной и производительной для различных вариантов использования.
Каждая AD идет на различные компромиссы в отношении гибкости и производительности, изменяя область их применения. Я думаю, хорошо, что есть такие опции.
2 лайка
пивер
9
Крис Ракаукас:
Каждая AD идет на различные компромиссы в отношении гибкости и производительности, изменяя область их применения. Я думаю, хорошо, что есть такие опции.
Знаете ли вы, есть ли где-нибудь простая страница «Плюсы и минусы»? В противном случае существует риск того, что, хотя для опытного разработчика Julia является языком мечты для AD, так как есть много вариантов и очень легко создать свой собственный, менее технически подкованный разработчик в конечном итоге немного запутается в том, что использовать для своего библиотечного кода. .
2 лайка
Tamas_Papp
10
Крис Ракаукас:
Каждая AD идет на различные компромиссы в отношении гибкости и производительности, изменяя область их применения. Я думаю, хорошо, что есть такие опции.
Всегда приятно иметь выбор. Однако ландшафт AD очень фрагментирован. Только ForwardDiff.jl является надежным, с пакетом обратного режима очень легко столкнуться с проблемами, используя, казалось бы, тривиальный код.
Справедливости ради следует отметить, что выполнение AD с сохранением универсального кода очень сложно, так как это выдвигает на первый план все проблемы вычисления типа результата и т. д.
Крис Ракаукас
11
Пивер:
Знаете ли вы, есть ли где-нибудь простая страница «Плюсы и минусы»? В противном случае существует риск того, что, хотя для опытного разработчика Julia является языком мечты для AD, так как есть много вариантов и очень легко создать свой собственный, менее технически подкованный разработчик в конечном итоге немного запутается в том, что использовать для своего библиотечного кода. .
Автоград имеет много нетипизированного материала в типах построения графиков и имеет макрос для определения примитивов. Это заставляет его работать почти со всем, но нетипизированные части снижают эффективность. Однако в чем-то вроде нейронной сети, где умножение матрицы занимает все время, небольшое количество динамической диспетчеризации не будет иметь значения, и это хороший выбор. Для функций с большим количеством небольших вызовов подфункций это будет нетривиальная разница в производительности.
ReverseDiff и Flux очень похожи. Они являются обратным режимом ForwardDiff и используют типы для отслеживания графа вычислений. Майк и Джарретт могут справиться с этим, но мне кажется, что ReverseDiff применим к большему количеству мест, но со временем это изменилось. YAAD также использует типы трекеров, но это очень простая реализация, но, вероятно, она больше похожа на эти две, чем нет. Однако типы трекеров отслеживают только ту ветвь, которую принимают значения. Таким образом, хотя вы можете скомпилировать график вычислений и сохранить его с помощью ReverseDiff, повторные применения градиента будут правильными только в том случае, если он вычерчивает что-то подходящее для нового значения. Это довольно фундаментальное ограничение, если вы хотите построить график один раз и потратить время на его оптимизацию/компиляцию для повторного использования.
Zygote является исходным кодом, и в его документе описывается, как он может получить преимущество в производительности, позволив всем ветвям компилироваться и оптимизироваться одновременно. Capstan осуществляется через кассету, которая, по сути, является формой преобразования источника в источник с использованием наложения кассеты. Опять же, Майк и Джарретт работают над чем-то, что здесь, вероятно, больше похоже, чем отличается, по схожим причинам, но для разных приложений. Но Zygote уже существует, а Cassette/Capstan — это скорее дело ближайшего будущего, так что . Тем не менее, несмотря на то, что системами на основе трекеров легко управлять (вы просто определяете новую диспетчеризацию для типа, в котором говорится, что такое производная), я не уверен, насколько настраивается источник-источник, но здесь возникает проблема, которая может дать это проблема:
const x = Vector{Float64}(undef,4) функция f!(z,y,x) х . = 2.*у г .= грех.(х) ничего конец г!(г,у) -> е!(г,у,х) # Задача: автодифф z = g!(y)
Я не уверен, как Zygote узнает, как обращаться с массивом кеша, в то время как с типом вы можете создать систему двойного кеша, которая работает с AD на основе типа через множественную диспетчеризацию. Capstan может справиться с этим, потому что он использует Cassette, который по сути является гибким и переопределяемым механизмом преобразования источника в источник, но это еще предстоит увидеть.
Итак, на данный момент Zygote.jl просто великолепен, если он работает с вашим кодом. Если нет, можно использовать ReverseDiff и Flux, а ReverseDiff может хранить/компилировать график вычислений, если это необходимо, чтобы получить скорость, аналогичную Zygote, но вы должны быть осторожны с приложением. С Autograd вы можете легко работать практически над чем угодно, но с этим связаны затраты на отправку. Capstan и Cassette могут стать прекрасной системой в ближайшем будущем как для AD, так и для настройки преобразования исходного кода, но этого еще нет, и я не уверен, что большинство пользователей Julia действительно будут знать, как писать наложения.
На данный момент я всегда нахожу ForwardDiff и ReverseDiff достаточно надежными, чтобы с легкостью передавать большие коды (полные решатели дифференциальных уравнений), и я жду, чтобы увидеть, что произойдет с источником к источнику.
6 лайков
Роджер-луо
12
Привет, ребята, я только что обновил свой блог AD Flux, он приближается к базовому уровню того, что мне нужно для тр(х1 * х2)
!
юлия> @benchmark Bench_mul_tr_flux(x1, x2) BenchmarkTools. Пробная версия: оценка памяти: 30,25 КиБ оценка выделения: 24 -------------- минимальное время: 8,017 мкс (0,00% GC) среднее время: 10,060 мкс (0,00% GC) среднее время: 14,592 мкс (30,22% GC) максимальное время: 16,378 мс (99,85% GC) -------------- образцы: 10000 оценки/выборка: 3
Я думал, что Flux напрямую использует ReverseDiff, что на самом деле не так, поэтому я не проверял в посте, потому что ReverseDiff больше не поддерживается. И спасибо @MikeInnes за упоминание здесь рекламы Flux. И я был бы рад помочь, если бы мы могли сделать подобный отдельный пакет AD в будущем.
Роджер-луо
13
Крис Ракаукас:
YAAD также использует типы трекеров, но это очень простая реализация, но, вероятно, она больше похожа на эти две, чем нет.
Да, я реализовал YAAD очень похожим образом по сравнению с AD Flux, смешанным с аналогичными соглашениями из PyTorch (как бэкенд, так и внешний интерфейс, это может облегчить адаптацию пользователей PyTorch). Я просто надеюсь, что теперь у нас будет отдельный пакет для AD от Flux!
Пока мы ждем Капстана и Зиготу, нам сейчас нужно что-то использовать.
лакшгупта
14
Некоторое время назад я пробовал что-то подобное (здесь), но остановился, потому что язык менялся в каждой версии. Готовы ли вы принимать запросы на вытягивание? Было бы здорово, если бы вы могли создать еще несколько задач для планов, которые вы имеете в виду, в репозитории github.
Роджер-луо
15
Я все еще обдумываю, что мы будем делать с YAAD.jl, так как трекер Flux на самом деле выглядит более оптимизированным. Я, вероятно, выберу имитацию трекера Flux (например, уберу его из Flux) или продолжу использовать очень простой AD с такой же разумной производительностью (теперь не самый быстрый, ха-ха).
Позже я отпишусь о проблеме в репозитории YAAD. jl вместе с ANN здесь, в беседе. И я определенно рад принять PR!
Роджер-луо
16
Крис Ракаукас:
YAAD также использует трекеры типа
.
У меня не трекерный тип, но глобальная ленточная версия, так как там всего около 200 строк, не так уж и сложно реализовать их обе XD:
https://github.com/Roger-luo/YAAD .jl/pull/2
невероятно22
17
Обратите внимание, что Flux имеет явное правило @grad
для умножения матриц, которое должно быть быстрым, в то время как Zygote, похоже, этого не делает (пока?): https://github. com/FluxML/Zygote.jl/blob/ master/src/lib/array.jl сравните с https://github.com/FluxML/Flux.jl/blob/master/src/tracker/array.jl, строка 327.
Так что, возможно, он должен вернуться к какому-то общему умножение цикла for, а умножение наивных матриц очень медленное в Джулии 1.0? версия дает мне замедление почти на эту величину.
МайкИннес
18
Несколько пакетов, которым требуется AD Flux (например, Omega и Turing), напрямую зависят от Flux. В этом нет большого недостатка, поскольку во Flux в любом случае не так много всего (в основном только несколько определений слоев), поэтому преимущество его разделения относительно минимально.
Тем не менее, мы, скорее всего, разделим его, как только Zygote и Capstan будут готовы к использованию в качестве AD по умолчанию. Но так будет не раньше, чем через несколько месяцев.
3 лайка
Роджер-луо
19
Я попытался явно определить умножение матриц:
Zygote.@grad LinearAlgebra.tr(x) = LinearAlgebra.tr(x), Δ-> (Δ * Matrix(I, size(x)), ) Zygote.@grad Base.:(*)(lhs::Matrix, rhs::Matrix) = lhs * rhs, grad -> (grad * transpose(rhs), transpose(lhs) * grad)
Или
Zygote.@grad Основание.:(*)(lhs::Matrix, rhs::Matrix) = BLAS.gemm('N', 'N', lhs, rhs), grad -> (grad * транспонировать (правая), транспонировать (левая) * град)
И похоже это не поможет…
маловероятно22
20
Любопытно, не пробовал (нет 1. 0 на ноуте). Если вы добавите println("forward")
& println("back")
, будет ли вызвано это определение?
следующая страница →
Как определить пользовательское правило AD в ForwardDiff — Общее использование
amrods
1
Как определить пользовательское правило AD в ForwardDiff
с использованием DiffRules
. Я пробовал это:
с использованием DiffRules используя ForwardDiff f(хх) = NaN DiffRules.@define_diffrule Main.f(xx) = :($xx[1] + $xx[2], $xx[1] - $xx[2]) julia> ForwardDiff.gradient(f, [1, 20]) 2-элементный вектор{Float64}: 0,0 0,0
как видите, не подхватывает правило. Этот тоже не работает:
г(х) = NaN DiffRules.@define_diffrule Main. g(x) = :(5) julia> ForwardDiff.derivative(g, 1) 0,0
Макэббот
2
ForwardDiff считывает правила из DiffRules только один раз, не отслеживая изменения. Поэтому вам, вероятно, нужно просто написать методы для g(::Dual)
самостоятельно.
2 лайка
амродс
3
Должен ли я загрузить DiffRules
и определить правило перед загрузкой ForwardDiff
? Я пытаюсь понять, как это работает.
РЕДАКТИРОВАТЬ: Это тоже не работает.
Это тоже не работает:
с помощью ForwardDiff используя двойные номера г(х) = NaN g(::Dual) = Dual(NaN, 5) julia> ForwardDiff. derivative(g, 1) 0,0
Не могли бы вы привести краткий пример?
амродс
4
Заработало в скалярном случае:
с использованием ForwardDiff const fd = ForwardDiff г(х) = NaN Main.g(::fd.Dual{T}), где {T} = fd.Dual{T}(NaN, 5) Юлия> fd.derivative(g, 1) 5,0
, но у меня возникли проблемы с определением пользовательских градиентов:
f(x) = x[1] + x[2] Main.f(x::Vector{fd.Dual{T}}), где {T} = fd.Dual{T}(f(value(x)), [50., 50.]) Юлия> fd.gradient(f, [1, 1]) 2-элементный вектор {Int64}: 1 1
Макэббот
5
Вы сохранили тег, что хорошо, параметр первого типа, но я думаю, вам нужно разрешить несколько партиалов:
julia> с помощью ForwardDiff: Dual, partials, jacobian julia> g(x::Dual{Z,T,N}), где {Z,T,N} = Dual{Z}(NaN, ntuple(i -> 5 * partials(x,i), N)) g (общая функция с двумя методами) julia> jacobian(x -> g. (x), [1,2]) # ранее была ошибка Матрица 2×2{Float64}: 5,0 0,0 0,0 5,0
Если вы хотите вызвать градиент на f
, он должен вернуть скаляр, одно двойное число. Но x::Vector{fd.Dual{T}}
— это вектор абстрактного типа, вы хотите f(x::AbstractVector{Dual{Z,T,N}}) где ... =
. Но определение таких правил необычно, обычно достаточно обрабатывать любые вызываемые скалярные функции. (Если на самом деле f
возвращает вектор, этот метод должен возвращать вектор двойных чисел.)
2 лайка
амродс
6
Понятно. Возвращаясь к первому сообщению, просто чтобы завершить раунд обучения, как я могу определить пользовательские правила с DiffRules
, которые можно использовать с ForwardDiff
?
амродс
7
Возможно, более важным для моего приложения является то, как я могу определить пользовательские правила для функций многих отдельных переменных. Например: 9(а — 1)) SpecialFunctions.gamma(a::Dual{T}, t), где {T} = Dual{T}(gamma(value(a), t), NaN)
Вот как?
Макэбботт
8
Да, примерно, но наверняка понадобится метод для Dual, Dual
тоже.
Для SpecialFunctions было бы идеально сделать запрос на включение в DiffRules. Здесь есть несколько правил:
https://github.com/JuliaDiff/DiffRules.jl/blob/master/src/rules.jl#L65
И некоторые здесь, хотя и не для ForwardDiff:
https://github.com/JuliaMath/SpecialFunctions. jl/blob/master/src/chainrules.jl#L40
Я не думаю, что легко использовать DiffRules для определения правила местного использования. Возможно, ForwardDiff можно было бы изменить, чтобы он знал, когда были определены дополнительные функции, и обновлял себя, но сейчас механизма нет. Этот цикл запускается один раз, я думаю, когда пакет предварительно компилируется:
https://github.com/JuliaDiff/ForwardDiff.jl/blob/master/src/dual.jl#L390
2 лайка
амродс
9
Я сделаю этот PR на DiffRules, это очень просто. ChainRules, кажется, не нуждается в этом. Я что-то не понимаю:
с использованием SpecialFunctions с использованием ForwardDiff: производная, градиент, частичные значения, значение, двойной SpecialFunctions.