Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Дифференциальный автомат ДИФ-102 (ДИФ102)

Дифференциальные автоматы ДИФ-102

 

 

Технические характеристики
дифференциальных автоматов серий ДИФ-102

Соответствие стандартам

ГОСТ Р 51327.1-99, НПБ 243-97

Число полюсов, P

1+N

Номинальное напряжение переменного тока однофазных устройств

230

Ряд номинальных токов In, A

6, 10, 16, 20, 25, 32, 40

Ряд номинальных отключающих дифференциальных токов IΔn, mA

30

Номинальный не отключающий дифференциальный ток IΔno, mA

0,5 IΔn (15)

Номинальная наибольшая включающая/отключающая способность Inc, A

4500

Номинальная включающая и отключающая способность Im, A

500

Время отключения (срабатывания) при IΔn, мс

≤100

Тип дифференциального расцепителя

АС

Коммутационная износостойкость, циклов, не менее

2000

Степень защиты

IP20

Сечение подключаемого провода, мм2

1 – 6

 

Габаритные размеры:

 

 

Преимущества:

Транспортировка и хранение.

Защитная пленка на каждом автомате ДИФ-102 предохраняет изделия от пыли и влаги. Она также является гарантией того, что аппарат новый и находится в заводской упаковке.

Твердая лакированная упаковка со сплошным дном, в которую по 12 шт. (для 1Р) упакованы выключатели, снижает брак при транспортировке и хранении, а также интересно выглядит и выделяется в торговой точке. Перфорация на крышке коробки позволяет аккуратно ее отделить, чтобы было легко доставать автоматы из упаковки. Язычок надежно фиксирует крышку при ее закрывании.

Штрих-коды и артикулы на всех видах упаковки каждого выключателя, групповой, транспортной коробке и на поддоне делают изделие идеально удобным в транспортировке и максимум приспособленным к требованиям розничной торговли и автоматизированного складского хранения.

Защитная этикетка-бандеролька на групповой коробке наклеена так, что, не разорвав ее, коробку невозможно открыть. А также, она позволяет хранить коробки на полке как горизонтально, так и вертикально.

Монтаж.

Место под надпись на лицевой стороне каждого автомата ДИФ-102 дает возможность надписать на каждом аппарате информацию о защищаемой цепи.

Подключается быстрее и проще, чем автомат в паре с УЗО при тех же функциях монтаж одного дифавтомата осуществляется быстрее, чем монтаж последовательно устанавливаемых автоматических выключателей и УЗО.

Крупная, четкая, видная издалека маркировка ускоряет монтаж и упрощает дальнейшее использование устройств. Боковая наклейка на упаковке каждого автомата ДИФ-102 с артикулом и характеристиками позволяет быстро найти нужный аппарат среди нескольких схожих.

Автомат ДИФ-102 экономит, как минимум, 30% места на распределительном щите благодаря ширине всего в 36 мм, в отличие от автоматического выключателя в паре с УЗО, занимающих 54 мм.

Применение:

Три типа защиты от токов короткого замыкания, токов перегрузки токов утечки означает, что этот аппарат обеспечивает самую полную защиту электрической цепи и не требует дополнительного использования УЗО или автоматического выключателя.

Цена гораздо ниже, чем при покупке УЗО и автоматического выключателя в силу использования электронной схемы. Это позволило сделать дифференциальные автоматы

ДИФ-102 дешевле, чем выполняющие те же функции УЗО и автоматические выключатели. Дифференциальные автоматы делают возможным защиту всех цепей даже тех потребителей, которые раньше не могли позволить себе купить сравнительно дорогостоящее УЗО.

Быстрая проверка работоспособности аппарата кнопкой “ТЕСТ” без вызова электрика. Проверить, работает ли устройство, просто, для этого достаточно нажать кнопку “ТЕСТ” на корпусе. Более того, это рекомендуется делать ежемесячно.

Индикация срабатывания от утечки тока выражается в выступившей из аппарата кнопке “Возврат”. Всегда можно определить, что причиной отключения аппаратом цепи послужила именно утечка тока. Автоматы ДИФ-102 поступают с завода с выступившей кнопкой “Возврат” – это следствие заводской проверки 100% выпускаемых дифференциальных автоматов на срабатывание в результате токов утечки.

 

Каталог продукции DEKraft

Цены Прайс-лист DEKraft

 

 

Звоните и заказывайте!!! (499) 290-30-16 (мнгк), (495) 973-16-54, 740-42-64, 973-65-17

 

EKF Дифференциальный автомат (характеристика C, AC, электронный, защита 270В) 4,5кА PROxima DA4-63-100S-pro

EKF Дифференциальный автомат (характеристика C, AC, электронный, защита 270В) 4,5кА PROxima DA4-63-100S-pro

Вход

Если у Вас есть зарегистрированный акаунт,
пожалуйста авторизуйтесь

Восстановление пароля

Ссылка на страницу изменения пароля будет отправлена на адрес Вашей электронной почты.

Вернуться на форму авторизации


ГлавнаяАвтоматы дифАД 1EKF Дифференциальный автомат (характеристика C, AC, электронный, защита 270В) 4,5кА PROxima DA4-63-100S-pro

{{:description}}

{{:price}}

{{:name}}

Достоинства

{{:advantages}}

Недостатки

{{:disadvantages}}

Комментарий

{{:comment_divided}}

{{:product_score_stars}}

{{:useful_score}}

{{:useless_score}}

Дифференциальный автомат АД-4 S 63А/100мА (хар. C, AC, электронный, защита 270В) 4,5кА EKF PROxima

Купить по низким ценам EKF Дифференциальный автомат (характеристика C, AC, электронный, защита 270В) 4,5кА PROxima DA4-63-100S-pro

Описание EKF Дифференциальный автомат (характеристика C, AC, электронный, защита 270В) 4,5кА PROxima DA4-63-100S-pro

Дифференциальный автоматический выключатель АД-4 4P C63 100 mA сочетает функции автоматического выключателя с устройством защитного отключения, реагирует на синусоидальный переменный ток утечки. Сработает между 5- и 10-кратным значением номинального тока. Рекомендуется к установке в сетях со смешанной нагрузкой, предполагающей умеренные пусковые токи.

  • Тип изделия:Дифавтомат
  • Отключающая способность, kA:4,5
  • Тип тока:Переменный ток (АС)
  • Номинальный ток, А:63
  • Характеристика срабатывания (кривая тока):C
  • Чувствительность:100mA
  • Модель:АД-4 4P C63 100mA
  • Норма трудозатрат в человеко-часах:0. 4
  • Базовая единица:шт
  • Страна сборки:Китай
  • Ширина, мм:150
  • Высота, мм:110
  • Масса, кг:0,66
  • Глубина, мм:90
  • Объем, л:1,485
  • Номинальное напряжение:380 В
  • Гарантия производителя, мес:84
  • Тип:AC
  • Количество полюсов:4P

Технические характеристики EKF Дифференциальный автомат (характеристика C, AC, электронный, защита 270В) 4,5кА PROxima DA4-63-100S-pro

  • Ширина 10 см
  • Высота 10 см
  • Глубина 10 см
  • org/PropertyValue”> Вес 1 кг
  • Кратность поставки 16
  • Номинальное напряжение В 380
  • Чувствительность мА 100
  • Количество полюсов 4
  • Номинальный ток A 63

Заказ в один клик

Мы позвоним Вам в ближайшее время

Несоответствие минимальной сумме заказ

Минимальная сумма заказа 1 500,00 ₽

Просьба увеличить заказ.

Гарантия производителя 1 год

Выпускаемая продукция на заводах EKF в Московской и Владимирской областях, по характеристическим параметрам не уступает мировым брендам. На сегодняшний день, изделия компании EKF можно купить по всей России, а также в странах ближнего зарубежья. Ассортимент, выпускаемый EKF,используется в сфере

Срочная доставка день в день

Объемный вес: 1 кг

Габариты: 10x10x10

* только для города Москва

Самовывоз по РФ

Объемный вес: 1 кг

Габариты: 10x10x10

 

Выберите пункт самовывозаМосква, ул. веерная, дом 7 к.2, офис 2

Доставка курьером по РФ

Объемный вес: 1 кг

Габариты: 10x10x10

По России:

Собственная служба доставки 350 ₽ 2-3 дней

Почта России уточнять 3-20 дней

ПЭК уточнять 2-7 дней

СДЭК Экспресс лайт уточнять 2-7 дней

СДЭК Супер Экспресс уточнять 2-4 дней

Деловые Линии уточнять 2-7 дней

Pony Express уточнять 2-7 дней

DPD уточнять 2-7 дней

DHL уточнять 2-7 дней

Boxberry уточнять 2-7 дней

ЖелДорЭкспедиция уточнять 3-10 дней

Байкал Сервис уточнять 2-10 дней

Энергия уточнять 2-7 дней

EKF Дифференциальный автомат (характеристика C, AC, электронный, защита 270В) 4,5кА PROxima DA4-63-100S-pro

Артикул: DA4-63-100S-pro

Дифференциальный автомат АД-4 S 63А/100мА (хар. C, AC, электронный, защита 270В) 4,5кА EKF PROxima

Объемный вес: 1 кг

Габариты: 10x10x10

Сравнить

В наличии

3 923,67 ₽ Скидка 40% 2 354,20 ₽

  • От 20 шт:

    2 354,20 ₽

    2 288,80 ₽

  • От 40 шт:

    2 288,80 ₽

    2 256,11 ₽

Задать вопрос

Мы позвоним Вам в ближайшее время

Номер телефона

Вопрос

Заказ на обратный звонок

Мы позвоним Вам в ближайшее время

Номер телефона

Вопрос

Обратный звонок

Мы позвоним Вам в ближайшее время

Номер телефона

Вопрос

Фон автоматической дифференциации – MATLAB & Simulink

Автоматическое дифференцирование Фон

Что такое автоматическое дифференцирование?

Автоматическое дифференцирование (также известное как autodiff , AD , или алгоритмическое дифференцирование ) есть широко используемый инструмент для глубокого обучения. Это особенно полезно для создания и обучение сложных моделей глубокого обучения без необходимости вычислять производные вручную для оптимизации. Примеры, показывающие, как создавать и настраивать модели глубокого обучения, см. циклы обучения и функции потерь, см. раздел Определение пользовательских циклов обучения, функций потерь и сетей.

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

  • Прямой режим оценивает числовую производную по выполнение операций с элементарными производными одновременно с операциями оценка самой функции. Как подробно описано в следующем разделе, программное обеспечение выполняет эти вычисления на вычислительном графе.

  • Обратный режим автоматическое дифференцирование использует расширение вычислительного графа прямого режима, позволяющее вычислять градиент обратным обходом графа. Поскольку программное обеспечение запускает код для вычисляет функцию и ее производную, записывает операции в массив данных структура под названием трассировка .

Как отмечают многие исследователи (например, Байдин, Перлмуттер, Радул, Сискинд [1]), для скаляра функция многих переменных, обратный режим вычисляет градиент более эффективно, чем режим вперед. Поскольку функция потерь при глубоком обучении является скалярной функцией всех веса, автоматическое дифференцирование Deep Learning Toolbox™ использует обратный режим.

Прямой режим

Рассмотрим задачу вычисления этой функции и ее градиента:

f(x)=x1exp(−12(x12+x22)).

Автоматическое дифференцирование работает в определенных точках. В этом случае возьмите х 1 = 2, х 2 = 1/2.

Следующий вычислительный граф кодирует вычисление функции ф ( х ).

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

Вычисление представляет собой повторное применение цепного правила. В этом примере производная от f в отношении x 1 расширяется до этого выражения:

dfdx1=du6dx1=∂u6∂u−1+∂u6∂u5∂u5∂x1=∂u6∂u−1+∂u6∂u5∂u5∂u4∂u4∂u4∂u4∂u4∂u4∂u4∂u4∂u4∂u4 ∂x1=∂u6∂u−1+∂u6∂u5∂u5∂u4∂u4∂u3∂u3∂x1=∂u6∂u−1+∂u6∂u5∂u5∂u4∂u4∂u3∂u3∂u1 ∂u1∂x1.

Пусть u˙i представляет производную выражения u i в отношении х 1 . Используя оцененные значения и и из оценки функции, вы вычислить частную производную f по отношению к x 1 , как показано на следующем рисунке. Обратите внимание, что все значения u˙i становятся доступными при обходе графика сверху вниз.

Чтобы вычислить частную производную по x 2 , вы проходите аналогичный вычислительный график. Следовательно, при вычислении градиента функции количество графиков обходов совпадает с количеством переменных. Этот процесс слишком медленный для типичного приложения глубокого обучения, которые имеют тысячи или миллионы переменных.

Обратный режим

Обратный режим использует один прямой обход вычислительного графа для настройки трассировки. Затем он вычисляет весь градиент функции за один обход графика в противоположное направление. Для приложений глубокого обучения этот режим гораздо более удобен. эффективный.

Теория реверсивного режима также основана на цепном правиле и связанных с ним сопряженные переменные, обозначенные чертой сверху. Сопряженная переменная для u i равно

u¯i=∂f∂ui.

С точки зрения вычислительного графа, каждая исходящая стрелка из переменной вносит свой вклад к соответствующей сопряженной переменной по ее члену в цепном правиле. Например, переменная u –1 имеет отходящих стрелок до двух переменные, u 1 и у 6 . График имеет связанный уравнение

∂f∂u−1=∂f∂u1∂u1∂u−1+∂f∂u6∂u6∂u−1=u¯1∂u1∂u−1+u¯6∂u6∂u− 1.

В этом расчете, учитывая, что u1=u−12 и u 6 = u 5 u –1 , получаем

u¯−1=u¯12u−1+u¯6u5.

При прямом обходе графика программа вычисляет промежуточный переменные u i . При обратном обходе начиная с начального значения u¯6=∂f∂f=1, вычисления в обратном режиме получают сопряженные значения для всех переменные. Следовательно, обратный режим вычисляет градиент всего за одно вычисление, экономия большого количества времени по сравнению с прямым режимом.

На следующем рисунке показано вычисление градиента в обратном режиме для функция

f(x)=x1exp(−12(x12+x22)).

Опять же, вычисление занимает x 1 = 2, х 2 = 1/2. Вычисление в обратном режиме опирается на полученные значения u i при вычислении функции в исходном вычислительном графе. справа часть рисунка, вычисленные значения сопряженных переменных появляются рядом с имена присоединенных переменных, используя формулы из левой части рисунка.

Окончательные значения градиента отображаются как u¯0=∂f∂u0=∂f∂x2 и u¯−1=∂f∂u−1=∂f∂x1.

Подробнее см. Байдин, Перлмуттер, Радул и Сискинд [1] или Википедию. статья об автоматическом дифференцировании [2].

Список литературы

[1] Байдин А.Г., Б.А. Перлмуттер, А. А. Радул и Дж. М. Сискинд. «Автоматическая дифференциация в машине Обучение: обзор». Журнал исследований машинного обучения, . 18(153), 2018, стр. 1–43. Доступно по адресу https://arxiv.org/abs/1502.05767.

[2] Автоматический дифференциация. Википедия. Доступно по адресу https://en.wikipedia.org/wiki/Automatic_дифференциация.

См. также

dlarray | dlградиент | dlfeval | дл сети

Связанные темы

  • Обучение генеративно-состязательной сети (GAN)
  • Определение пользовательских циклов обучения, функций потерь и сетей
  • Обучение сети с использованием пользовательского цикла обучения
  • Указание параметров обучения в пользовательском цикле обучения
  • Определение функции потери модели для пользовательского цикла обучения
  • Обучение сети с использованием функции модели
  • Инициализация обучаемых параметров для функции модели
  • Список функций с поддержкой dlarray

Вы щелкнули ссылку, соответствующую этой команде MATLAB:

Запустите команду, введя ее в командном окне MATLAB. Веб-браузеры не поддерживают команды MATLAB.

Выберите веб-сайт, чтобы получить переведенный контент, где он доступен, и ознакомиться с местными событиями и предложениями. В зависимости от вашего местоположения мы рекомендуем вам выбрать: .

Вы также можете выбрать веб-сайт из следующего списка:

Европа

Обратитесь в местный офис

Усовершенствованная автоматическая дифференциация в JAX — документация JAX

Авторы: Владимир Микулик и Маттео Хессель

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

Хотя понимание того, как работает автоматическая дифференциация внутри, не имеет решающего значения для использования JAX в большинстве контекстов, мы рекомендуем читателю просмотреть это довольно доступное видео, чтобы получить более глубокое представление о том, что происходит.

Поваренная книга Autodiff представляет собой более продвинутое и более подробное объяснение того, как эти идеи реализованы в серверной части JAX. Нет необходимости понимать это, чтобы делать большинство вещей в JAX. Однако некоторые функции (например, определение пользовательских производных) зависят от понимания этого, поэтому стоит знать, что это объяснение существует, если вам когда-либо понадобится их использовать. 9n\to\mathbb R\), можно отождествить с якобианом его градиента. JAX предоставляет два преобразования для вычисления якобиана функции, jax.jacfwd и jax.jacrev , соответствующие авторазнице в прямом и обратном режимах. Они дают один и тот же ответ, но один из них может быть эффективнее другого в разных обстоятельствах — см. видео об автодиффе, ссылка на которое приведена выше, для объяснения.

 деф гессиана (f):
  вернуть jax.jacfwd(jax.grad(f))
 

Давайте еще раз проверим правильность этого на скалярном произведении \(f: \mathbf{x} \mapsto \mathbf{x} ^\top \mathbf{x}\). 92 f}{\partial_i\partial_j}(\mathbf{x}) = 0\).

 импортировать jax.numpy как jnp
защита f(x):
  вернуть jnp.dot (х, х)
гессиан (f) (jnp.array ([1., 2., 3.]))
 
 DeviceArray([[2., 0., 0.],
             [0., 2., 0.],
             [0., 0., 2.]], dtype=float32)
 

Однако часто нас не интересует вычисление самого полного гессиана, и это может быть очень неэффективно. Autodiff Cookbook объясняет некоторые приемы, такие как произведение вектора Гессе, которые позволяют использовать его без материализации всей матрицы.

Если вы планируете работать с производными более высокого порядка в JAX, мы настоятельно рекомендуем прочитать Autodiff Cookbook.

Оптимизация высшего порядка

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

 определение meta_loss_fn (параметры, данные):
  """Вычисляет потери после одного шага SGD. """
  грады = jax.grad (loss_fn) (параметры, данные)
  вернуть loss_fn (параметры - lr * грады, данные)
meta_grads = jax.grad (meta_loss_fn) (параметры, данные)
 

Остановка градиентов

Auto-diff позволяет автоматически вычислять градиент функции относительно ее входных данных. Однако иногда нам может понадобиться дополнительный контроль: например, мы можем захотеть избежать обратного распространения градиентов через некоторое подмножество вычислительного графа.

Рассмотрим, например, обновление обучения с подкреплением TD(0) (временная разница). Это используется, чтобы научиться оценивать значение состояния в среде на основе опыта взаимодействия с окружающей средой. Предположим, что оценка значения \(v_{\theta}(s_{t-1}\)) в состоянии \(s_{t-1}\) параметризована линейной функцией.

 # Функция значения и начальные параметры
value_fn = тета лямбда, состояние: jnp.dot (тета, состояние)
тета = jnp.array([0.1, -0.1, 0.])
 

Рассмотрим переход из состояния \(s_{t-1}\) в состояние \(s_t\), во время которого мы наблюдали вознаграждение \(r_t\)

 # Пример перехода. 
s_tm1 = jnp.array([1., 2., -1.])
r_t = jnp.массив(1.)
s_t = jnp.массив ([2., 1., 0.])
 

Обновление TD(0) сетевых параметров:

\[ \ Delta \ theta = (r_t + v _ {\ theta} (s_t) – v _ {\ theta} (s_ {t-1}}} \ nabla v _ {\ theta} (s_ {t-1}) \] 92 \]

, если игнорируется зависимость цели \(r_t + v_{\theta}(s_t)\) от параметра \(\theta\).

Как мы можем реализовать это в JAX? Если мы наивно запишем псевдопотери, то получим:

 по определению td_loss (тета, s_tm1, r_t, s_t):
  v_tm1 = значение_fn(тета, s_tm1)
  цель = r_t + value_fn (тета, s_t)
  возврат (цель - v_tm1) ** 2
td_update = jax.grad(td_loss)
delta_theta = td_update(theta, s_tm1, r_t, s_t)
delta_theta
 
 DeviceArray([ 2.4, -2.4, 2.4], dtype=float32)
 

Но td_update будет , а не вычислять обновление TD(0), потому что вычисление градиента будет включать зависимость target от \(\theta\).

Мы можем использовать jax. lax.stop_gradient , чтобы заставить JAX игнорировать зависимость цели от \(\theta\):

 по определению td_loss (тета, s_tm1, r_t, s_t):
  v_tm1 = значение_fn(тета, s_tm1)
  цель = r_t + value_fn (тета, s_t)
  возврат (jax.lax.stop_gradient(цель) - v_tm1) ** 2
td_update = jax.grad(td_loss)
delta_theta = td_update(theta, s_tm1, r_t, s_t)
delta_theta
 
 DeviceArray([-2.4, -4.8, 2.4], dtype=float32)
 

Это будет обрабатывать цель так, как если бы она , а не зависела от параметров \(\theta\) и вычисляла правильное обновление параметров.

jax.lax.stop_gradient также может быть полезен в других настройках, например, если вы хотите, чтобы градиент от некоторой потери влиял только на подмножество параметров нейронной сети (поскольку, например, другие параметры обучаются с использованием другой потери). 9n\), которая используется как часть более крупной функции, для которой мы хотим найти градиент, мы просто притворяемся во время обратного прохода, что \(f\) является функцией тождества. Это можно аккуратно реализовать с помощью jax.lax.stop_gradient :

.
 определение f(x):
  return jnp.round(x) # недифференцируемый
защита Straight_through_f(x):
  # Создайте точно нулевое выражение с помощью леммы Стербенца, которое имеет
  # ровно один градиент.
  ноль = х - jax.lax.stop_gradient(x)
  вернуть ноль + jax.lax.stop_gradient(f(x))
печать("f(x): ", f(3.2))
print ("прямой_сквозной_f(x):", прямой_сквозной_f(3.2))
печать ("град(ф)(х):", jax.град(ф)(3.2))
print("град(прямой_через_f)(x):", jax.град(прямой_через_f)(3.2))
 
 f(x): 3,0
Straight_through_f(x): 3.0
град (f) (x): 0,0
град(прямой_через_f)(х): 1.0
 

Градиенты для каждого примера

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

Например, это необходимо для приоритизации данных на основе величины градиента или для применения отсечения/нормализации на выборочной основе.

Во многих фреймворках (PyTorch, TF, Theano) часто бывает непросто вычислить градиенты для каждого примера, поскольку библиотека напрямую накапливает градиент по пакету. Наивные обходные пути, такие как вычисление отдельных потерь для каждого примера и последующее агрегирование полученных градиентов, обычно очень неэффективны.

В JAX мы можем определить код для вычисления градиента для каждой выборки простым, но эффективным способом.

Просто объедините jit , vmap и град преобразований вместе:

 perex_grads = jax.jit(jax.vmap(jax.grad(td_loss), in_axes=(Нет, 0, 0, 0)))
# Попробуй это:
batched_s_tm1 = jnp.stack([s_tm1, s_tm1])
batched_r_t = jnp.stack([r_t, r_t])
batched_s_t = jnp.stack([s_t, s_t])
perex_grads(theta, batched_s_tm1, batched_r_t, batched_s_t)
 
 DeviceArray([[-2.4, -4.8, 2.4],
             [-2.4, -4.8, 2.4]], dtype=float32)
 

Давайте пройдемся по одному преобразованию за раз.

Сначала применяем jax.grad td_loss , чтобы получить функцию, которая вычисляет градиент потерь по отношению к. параметры на одиночных (непакетных) входах:

 dtdloss_dtheta = jax.grad(td_loss)
dtdloss_dtheta(тета, s_tm1, r_t, s_t)
 
 DeviceArray([-2.4, -4.8, 2.4], dtype=float32)
 

Эта функция вычисляет одну строку массива выше.

Затем мы векторизуем эту функцию, используя jax.vmap . Это добавляет пакетное измерение ко всем входам и выходам. Теперь, имея пакет входных данных, мы производим пакет выходных данных — каждый выход в пакете соответствует градиенту для соответствующего члена входного пакета.

 почти_perex_grads = jax.vmap(dtdloss_dtheta)
batched_theta = jnp.stack([тета, тета])
почти_perex_grads(batched_theta, batched_s_tm1, batched_r_t, batched_s_t)
 
 DeviceArray([[-2.4, -4.8, 2.4],
             [-2.4, -4.8, 2.4]], dtype=float32)
 

Это не совсем то, что нам нужно, потому что мы должны вручную передать этой функции пакет тета с, тогда как на самом деле мы хотим использовать один тета . Мы исправим это, добавив in_axes к jax.vmap , указав theta как None , а остальные аргументы как 0 . Это заставляет результирующую функцию добавлять дополнительную ось только к другим аргументам, оставляя тета несвязанными, как мы и хотели:

 inefficient_perex_grads = jax.vmap (dtdloss_dtheta, in_axes = (нет, 0, 0, 0))
inefficient_perex_grads(theta, batched_s_tm1, batched_r_t, batched_s_t)
 
 DeviceArray([[-2.4, -4.8, 2.4],
             [-2.4, -4.8, 2.4]], dtype=float32)
 

Почти готово! Это делает то, что мы хотим, но медленнее, чем должно быть. Теперь мы завернем все это в jax.jit , чтобы получить скомпилированную, эффективную версию той же функции:

 perex_grads = jax.jit (неэффективные_perex_grads)
perex_grads(theta, batched_s_tm1, batched_r_t, batched_s_t)
 
 DeviceArray([[-2.4, -4.8, 2.4],
             [-2.4, -4.8, 2.4]], dtype=float32)
 
 %timeit inefficient_perex_grads(theta, batched_s_tm1, batched_r_t, batched_s_t).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *