Автомат дифференциальный. Дифференциальный автомат: принцип работы, виды и применение

Что такое дифференциальный автомат. Как работает дифференциальный автомат. Какие бывают виды дифференциальных автоматов. Где применяются дифференциальные автоматы. Как выбрать дифференциальный автомат.

Содержание

Что такое дифференциальный автомат и как он работает

Дифференциальный автомат (диффавтомат) — это комбинированное устройство защиты электрической цепи, объединяющее в себе функции автоматического выключателя и устройства защитного отключения (УЗО). Его основная задача — защита от перегрузок, коротких замыканий и утечек тока на землю.

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

Основные компоненты дифференциального автомата:

  • Тепловой расцепитель — защищает от перегрузок
  • Электромагнитный расцепитель — срабатывает при коротких замыканиях
  • Дифференциальный трансформатор — определяет разницу входящего и исходящего тока
  • Чувствительное реле — анализирует сигнал от трансформатора
  • Механизм расцепления — размыкает контакты при срабатывании защиты

Виды дифференциальных автоматов

Дифференциальные автоматы различаются по нескольким параметрам:


По типу защиты от утечки тока:

  • Тип AC — реагируют только на переменный синусоидальный ток утечки
  • Тип A — срабатывают на переменный и пульсирующий постоянный ток утечки
  • Тип B — чувствительны ко всем видам токов утечки, включая постоянный

По числу полюсов:

  • Однополюсные — защищают одну фазу
  • Двухполюсные — для однофазных сетей (фаза + нейтраль)
  • Трехполюсные — для трехфазных сетей без нейтрали
  • Четырехполюсные — для трехфазных сетей с нейтралью

По номинальному току:

Стандартные значения: 6, 10, 16, 20, 25, 32, 40, 50, 63, 80, 100, 125 А

По чувствительности к току утечки (номинальный отключающий дифференциальный ток):

Типовые значения: 10, 30, 100, 300, 500 мА

Преимущества и недостатки дифференциальных автоматов

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

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

  • Компактность — экономия места в электрощите
  • Удобство монтажа — меньше проводов и соединений
  • Комплексная защита электроцепи одним устройством
  • Снижение вероятности ошибок при монтаже
  • Экономия средств при покупке (по сравнению с отдельными устройствами)

Недостатки:

  • Более высокая стоимость замены при выходе из строя
  • Сложность подбора для нестандартных условий эксплуатации
  • Невозможность раздельной настройки параметров УЗО и автоматического выключателя
  • Меньшая гибкость при проектировании сложных электрических схем

Области применения дифференциальных автоматов

Дифференциальные автоматы широко применяются в различных сферах:


В жилых помещениях:

  • Защита розеточных групп
  • Обеспечение безопасности в ванных комнатах и кухнях
  • Защита осветительных цепей

В общественных зданиях:

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

В промышленности:

  • Защита отдельных станков и производственных линий
  • Обеспечение безопасности во влажных производственных помещениях
  • Защита электрооборудования в пожароопасных зонах

Как выбрать дифференциальный автомат

При выборе дифференциального автомата необходимо учитывать несколько ключевых параметров:

Номинальный ток:

Выбирается в зависимости от мощности защищаемой цепи и сечения проводников. Например, для розеточной группы в квартире обычно используют автоматы на 16 или 20 А.

Ток утечки:

Для бытового применения стандартным является значение 30 мА. В помещениях с повышенной влажностью могут использоваться устройства с током утечки 10 мА.

Тип устройства:

Для большинства бытовых применений достаточно типа AC. Однако при наличии электронной техники рекомендуется использовать тип A.


Число полюсов:

Выбирается в зависимости от типа сети. Для однофазной сети используются двухполюсные автоматы, для трехфазной — четырехполюсные.

Отключающая способность:

Должна соответствовать возможным токам короткого замыкания в сети. Для бытовых применений обычно достаточно 4,5 или 6 кА.

Монтаж и эксплуатация дифференциальных автоматов

Правильный монтаж и эксплуатация дифференциальных автоматов crucial for their effective operation and longevity. Вот несколько key points to consider:

Монтаж:

  • Установка должна производиться квалифицированным электриком
  • Необходимо соблюдать правила подключения фазного и нулевого проводников
  • Устройство должно быть надежно закреплено на DIN-рейке в электрощите
  • Следует обеспечить достаточное пространство для вентиляции

Эксплуатация:

  • Регулярно проверяйте работоспособность устройства нажатием тестовой кнопки
  • Не допускайте перегрузки защищаемой цепи
  • При частых срабатываниях необходимо выявить и устранить причину
  • Замена устройства должна производиться по истечении срока службы или при выходе из строя

Соблюдение этих правил поможет обеспечить надежную защиту электросети и безопасность пользователей.


Возможные неисправности дифференциальных автоматов и их устранение

Несмотря на высокую надежность, дифференциальные автоматы могут выходить из строя или работать некорректно. Рассмотрим наиболее распространенные проблемы и способы их решения:

Частое срабатывание без видимых причин:

  • Проверьте изоляцию проводки на наличие повреждений
  • Убедитесь в отсутствии влаги в розетках и распределительных коробках
  • Измерьте сопротивление изоляции подключенных электроприборов

Устройство не включается после срабатывания:

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

Не срабатывает при нажатии тестовой кнопки:

  • Убедитесь в наличии напряжения в сети
  • Проверьте правильность подключения устройства
  • При подтверждении неисправности замените автомат

Нагрев корпуса устройства:

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

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


Нормативные требования и стандарты для дифференциальных автоматов

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

Основные стандарты:

  • ГОСТ Р 51327.1-2010 — устанавливает общие требования к АВДТ
  • ГОСТ IEC 61009-1-2014 — определяет требования к конструкции и характеристикам
  • ГОСТ 31225.2.1-2012 — регламентирует методы испытаний АВДТ

Ключевые требования:

  • Устойчивость к механическим и климатическим воздействиям
  • Соответствие заявленным электрическим характеристикам
  • Наличие маркировки с основными параметрами
  • Соответствие требованиям пожарной безопасности

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


Все продукты | Schneider Electric Россия

  • Распределение электроэнергии низкого напряжения

  • Автоматизация и безопасность зданий

  • Распределение электроэнергии среднего напряжения и автоматизация электроснабжения

  • Системы резервного питания и охлаждения

  • se.com/ru/ru/work/products/residential-and-small-business/»>

    Электроустановочное оборудование и системы управления домом

  • Автоматизация и промышленный контроль

  • Солнечная энергетика

Самые популярные серии

Самые популярные серии

Самые популярные серии

Самые популярные серии

Самые популярные серии

Самые популярные серии

Самые популярные серии

  • Серии: 65

  • Серии: 25

  • Серии: 22

  • Серии: 25

  • Серии: 11

  • Серии: 46

  • Серии: 26

  • Серии: 1

  • Серии: 35

Дифференциальный автомат 2п 63А 30mA АД-063Про

Дифференциальный автомат 2п 63А 30mA АД-063Про — 7000607 Legrand Выключатель тока тип A Контактор купить в Москве по низкой цене

Показать каталог ↑Скрыть каталог ↓

Уважаемые Клиенты! В связи со сложившейся ситуацией, просим Вас актуальные цены на продукцию уточнять у персональных менеджеров. Благодарим за взаимопонимание и сотрудничество!

Найти

Kорзинa (пуста)

  • Низковольтное оборудование
    • Низковольтные устройства различного назначения и аксессуары
    • Пускорегулирующая аппаратура
    • Аксессуары для аппаратов защиты
    • Контакторы
    • Компоненты светосигнальной арматуры
    • Автоматы защиты двигателя
    • Автоматические выключатели модульные
    • Светосигнальная арматура в сборе
    • Элементы управления для светосигнальной арматуры
    • Выключатели нагрузки (рубильники)
    • Измерительные приборы для установки в щит
    • Автоматические выключатели стационарные
    • Предохранители
    • Автоматические выключатели дифференциального тока (диффавтоматы)
      • Автоматический выключатель дифференциального тока (дифавтомат, АВДТ)
        • Устройства защитного отключения (УЗО)
        • Клеммные колодки
        • Устройства оптической (световой) и акустической (звуковой) сигнализации
        • Светосигнальная арматура на дин-рейку
        • Автоматы селективной защиты
      • Электрооборудование
      • Кабель-Провод
      • Светотехника
      • Электроустановочные изделия
      • Общая рубрика
      • Отделка и декор
      • Инженерные системы
      • Инструмент и крепеж
      • Общестроительные материалы

      Главная >Низковольтное оборудование >Автоматические выключатели дифференциального тока (диффавтоматы) >Автоматический выключатель дифференциального тока (дифавтомат, АВДТ) >Legrand >Дифференциальный автомат 2п 63А 30mA АД-063Про — 7000607 Legrand (#306794)

      org/Offer»>
      Наименование Наличие Цена
      опт с НДС
      Дата
      обновления
      Добавить
      в корзину
      Срок
      поставки
      Дифференциальный автомат 2п 63А 30mA АД-063Про — 7000607 116 1 526.45 р. 31.10.2022 От 5 дней
      Выключатель диф. тока 2п 63А 30мА тип A АД-063 Контактор 7000607 Под заказ 1 592.68 р. 31.10.2022 От 30 дней
      … … … … … … … … … …

      Условия поставки дифференциального автомата 2п 63А 30mA АД-063Про — 7000607 Legrand

      Купить дифференциальные автоматы 2п 63А 30mA АД-063Про — 7000607 Legrand могут физические и юридические лица, по безналичному и наличному расчету, отгрузка производится с пункта выдачи на следующий день после поступления оплаты.

      Цена дифференциального автомата 2п 63А 30mA АД-063Про — 7000607 Legrand Выключатель тока тип A Контактор зависит от общей суммы заказа, на сайте указана оптовая цена.

      Доставим дифференциального автомат 2п 63А 30mA АД-063Про — 7000607 Legrand на следующий день после оплаты, по Москве и в радиусе 200 км от МКАД, в другие регионы РФ отгружаем транспортными компаниями.

      Похожие товары

      Выключатель автоматический дифференциального тока 2п C 60А 30мА тип AC 4.5кА ДИФ-101 6мод. SchE 15009DEK Schneider Electric

      880 788.05 р.

      Выключатель автоматический дифференциального тока АД12 2п 10А C 30мА тип AC (3 мод) | MAD10-2-010-C-030 IEK (ИЭК)

      931 776. 17 р.

      Выключатель автоматический дифференциального тока АД12-22C63-АC-УХЛ4 2п 63А C 30мА тип AC | 141595 КЭАЗ (Курский электроаппаратный завод)

      200 778.47 р.

      Выключатель автоматический дифференциального тока АД12 2п 32А C 30мА тип AC (3 мод) | MAD10-2-032-C-030 IEK (ИЭК)

      1900 774.25 р.

      Дифференциальный автомат IEK АД12 2Р 16 А 30 мА MAD10-2-016-C-030 (ИЭК)

      22231 724. 24 р.

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

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

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

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

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

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

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

      Как отмечают многие исследователи (например, Байдин, Перлмуттер, Радул и Сискинд [1]), для скаляра функция многих переменных, обратный режим вычисляет градиент более эффективно чем прямой режим. Поскольку целевая функция является скалярной, решают . автоматическое дифференцирование использует обратный режим для скалярной оптимизации. Однако для векторные функции, такие как нелинейный метод наименьших квадратов и решение уравнений, решить использует прямой режим для некоторых вычислений. См. Автоматическое дифференцирование в Optimization 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 . Используя оцененные значения u i из оценки функции, вы вычисляете частную производную 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].

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

      Автоматическое дифференцирование (AD) применяется к решению и prob2struct функции при следующих условиях:

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

      • Решатель, вызываемый solve , это fmincon , fminunc , fsolve или lsqnonlin .

      • Для задач оптимизации 'ObjectiveDerivative' и 'ConstraintDerivative' пара аргументов «имя-значение» для решить или prob2struct установлены в 'авто' (по умолчанию), 'автоматическая переадресация' или 'автореверс' .

      • Для задач уравнения установлена ​​опция 'EquationDerivative' на 'авто' (по умолчанию), 'авто-вперед' или 'автореверс' .

      5998
      При применении AD Поддерживаются все функции ограниченияОдин или несколько ограничений, не поддерживаемых
      Объективная функция AD. Используется для объектива и конструкции AD. Сознание
      Ad. AD не используется

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

      Решатели выбирают следующий тип AD по умолчанию:

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

      • Для общей нелинейной целевой функции fminunc значения по умолчанию чтобы обратить AD.

      • Для целевой функции метода наименьших квадратов fmincon и fminunc по умолчанию для пересылки AD для целевой функции. Для определения основанной на проблеме целевой функции наименьших квадратов см. Запись целевой функции для основанного на проблеме метода наименьших квадратов.

      • lsqnonlin по умолчанию пересылает AD, когда число элементов в целевом векторе больше или равно числу переменных. В противном случае lsqnonlin по умолчанию реверсирует AD.

      • fsolve по умолчанию пересылает AD, когда количество уравнений больше или равно числу переменных. В противном случае, fsolve по умолчанию реверс AD.

      В настоящее время AD работает только для первых производных; это не относится ко второму или выше производные. Так, например, если вы хотите использовать аналитический гессиан для ускорения вашего оптимизации, вы не можете использовать решить напрямую, и вместо этого должны использовать подход, описанный в разделе «Производные предложения в проблемно-ориентированном рабочем процессе».

      Ссылки

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

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

      См. также

      решить | prob2struct

      См. также

      • Настройка оптимизации на основе проблем
      • Поддерживаемые операции для переменных и выражений оптимизации
      • Эффект автоматического дифференцирования в проблемно-ориентированной оптимизации

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

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

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

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

      Европа

      Свяжитесь с местным офисом

      Введение в градиенты и автоматическое дифференцирование

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

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

      В этом руководстве вы изучите способы вычисления градиентов с помощью TensorFlow, особенно при быстром выполнении.

      Настройка

       импортировать numpy как np
      импортировать matplotlib. pyplot как plt
      импортировать тензорный поток как tf
       

      Вычисление градиентов

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

      Градиентные ленты

      TensorFlow предоставляет tf.GradientTape API для автоматической дифференциации; то есть вычисление градиента вычисления относительно некоторых входных данных, обычно tf. Переменная с. TensorFlow «записывает» соответствующие операции, выполняемые в контексте tf.GradientTape , на «ленту». Затем TensorFlow использует эту ленту для вычисления градиентов «записанного» вычисления с использованием дифференциации обратного режима.

      Вот простой пример:

       x = tf.Variable(3.0)
      с tf.GradientTape() в качестве ленты:
        у = х**2
       

      После того, как вы записали некоторые операции, используйте GradientTape.gradient(target, sources) для вычисления градиента некоторой цели (часто потери) относительно некоторого источника (часто переменных модели):

       # dy = 2x * дх
      dy_dx = лента.градиент(у, х)
      dy_dx.numpy()
       
      6,0
       

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

       w = tf.Variable(tf.random.normal((3, 2)), name='w')
      b = tf.Variable(tf.zeros(2, dtype=tf.float32), name='b')
      х = [[1., 2., 3.]]
      с tf.GradientTape(persistent=True) в качестве ленты:
        у = х @ ш + б
        потеря = tf.reduce_mean (y ** 2)
       

      Чтобы получить градиент потерь по обеим переменным, вы можете передать их в качестве источников методу градиента . Лента гибка в отношении того, как передаются источники, и будет принимать любую вложенную комбинацию списков или словарей и возвращать градиент, структурированный таким же образом (см. tf.nest ).

       [dl_dw, dl_db] = tape.gradient(потеря, [w, b])
       

      Градиент по отношению к каждому источнику имеет форму источника:

       print(w.shape)
      печать (dl_dw.shape)
       
      (3, 2)
      (3, 2)
       

      Вот снова расчет градиента, на этот раз с использованием словаря переменных:

       my_vars = {
          'ж': ш,
          'б': б
      }
      град = лента.градиент (потери, мои_вары)
      град['б']
       
      
       

      Градиенты относительно модели

      Обычно tf. Variables собираются в tf.Module или один из его подклассов ( слоев. Слой , керас. Модель ) для контрольных точек и экспорта.

      В большинстве случаев вам потребуется рассчитать градиенты по отношению к обучаемым переменным модели. Поскольку все подклассы tf.Module объединяют свои переменные в свойстве Module.trainable_variables , вы можете вычислить эти градиенты с помощью нескольких строк кода: релу’) х = tf.constant([[1., 2., 3.]]) с tf.GradientTape() в качестве ленты: # Проход вперёд у = слой (х) потеря = tf.reduce_mean (y ** 2) # Рассчитываем градиенты относительно каждой обучаемой переменной град = лента.градиент (потери, слой.обучаемые_переменные)

       для var, g в zip (layer.trainable_variables, grad):
        печать (f'{var.name}, форма: {g. shape}')
       
      Плотность/ядро:0, форма: (3, 2)
      Плотность/смещения:0, форма: (2,)
       

      Управление тем, что просматривает лента

      Поведение по умолчанию — запись всех операций после доступа к обучаемой tf.Variable . Причины этого следующие:

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

      Например, в следующем примере не удается рассчитать градиент, потому что tf.Tensor по умолчанию не «отслеживается», а tf. Variable не поддается обучению:

       # Обучаемая переменная
      x0 = tf.Variable(3.0, имя='x0')
      # Не обучаемый
      x1 = tf.Variable(3.0, name='x1', обучаемый=False)
      # Не переменная: переменная + тензор возвращает тензор.
      x2 = tf.Variable(2.0, имя='x2') + 1.0
      # Не переменная
      x3 = tf.constant(3.0, имя='x3')
      с tf.GradientTape() в качестве ленты:
        у = (х0**2) + (х1**2) + (х2**2)
      град = лента.градиент(у, [х0, х1, х2, х3])
      для г в град:
        печать (г)
       
      tf.Tensor(6.0, shape=(), dtype=float32)
      Никто
      Никто
      Никто
       

      Вы можете перечислить переменные, отслеживаемые лентой, используя метод GradientTape.watched_variables :

       [var.name for var in tape.watched_variables()]
       
      ['x0:0']
       

      tf.GradientTape предоставляет хуки, которые дают пользователю контроль над тем, что просматривается, а что нет.

      Для записи градиентов относительно tf.Tensor необходимо вызвать GradientTape.watch(x) :

       x = tf.constant(3.0)
      с tf.GradientTape() в качестве ленты:
        лента.часы(х)
        у = х**2
      # ду = 2x * dx
      dy_dx = лента.градиент(у, х)
      печать (dy_dx.numpy())
       
      6,0
       

      И наоборот, чтобы отключить поведение по умолчанию для просмотра всех tf.Variables , установите watch_accessed_variables=False при создании градиентной ленты. Этот расчет использует две переменные, но связывает градиент только для одной из переменных:

       x0 = tf.Variable(0.0)
      x1 = tf.Переменная(10.0)
      с tf.GradientTape(watch_accessed_variables=False) в качестве ленты:
        лента.часы(x1)
        y0 = tf.math.sin(x0)
        y1 = tf.nn.softplus(x1)
        у = у0 + у1
        ys = tf.reduce_sum (y)
       

      Поскольку GradientTape. watch не вызывался для x0 , градиент относительно него не вычисляется:

       # dys/dx1 = exp(x1) / (1 + exp(x1)) = sigmoid(x1)
      град = лента.градиент(ys, {'x0': x0, 'x1': x1})
      print('dy/dx0:', град['x0'])
      print('dy/dx1:', град['x1'].numpy())
       
      dy/dx0: Никто
      dy/dx1: 0,9999546
       

      Промежуточные результаты

      Вы также можете запросить градиенты вывода по отношению к промежуточным значениям, вычисленным внутри tf.GradientTape контекст.

       х = tf.constant(3.0)
      с tf.GradientTape() в качестве ленты:
        лента.часы(х)
        у = х * х
        г = у * у
      # Используйте ленту для вычисления градиента z по отношению к
      # промежуточное значение y.
      # dz_dy = 2 * у и у = х ** 2 = 9
      печать (лента.градиент (z, y).numpy())
       
      18,0
       

      По умолчанию ресурсы, удерживаемые GradientTape , высвобождаются, как только вызывается метод GradientTape. gradient . Чтобы вычислить несколько градиентов за одно и то же вычисление, создайте градиентную ленту с постоянный=Истина . Это позволяет многократно вызывать метод градиента , поскольку ресурсы высвобождаются при сборке мусора для объекта ленты. Например:

       x = tf.constant([1, 3.0])
      с tf.GradientTape(persistent=True) в качестве ленты:
        лента.часы(х)
        у = х * х
        г = у * у
      print(tape.gradient(z, x).numpy()) # [4.0, 108.0] (4 * x**3 при x = [1.0, 3.0])
      print(tape.gradient(y, x).numpy()) # [2.0, 6.0] (2 * x at x = [1.0, 3.0])
       
      [ 4. 108.]
      [2. 6.]
       
       del tape # Удалить ссылку на ленту
       

      Примечания по производительности

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

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

        Для повышения эффективности некоторые операции (например, ReLU ) не нужно сохранять свои промежуточные результаты, и они обрезаются во время прямого прохода. Однако, если вы используете persisted=True на своей ленте, ничего не отбрасывается и пиковое использование памяти будет выше.

      Градиенты нескалярных целей

      Градиент — это, по сути, операция над скаляром.

       х = tf.Variable(2.0)
      с tf.GradientTape(persistent=True) в качестве ленты:
        у0 = х**2
        у1 = 1/х
      печать (лента.градиент (y0, x).numpy())
      печать (лента.градиент (y1, x).numpy())
       
      4.0
      -0,25
       

      Таким образом, если вы запросите градиент нескольких целей, результат для каждого источника будет следующим:

      • Градиент суммы целей или эквивалентно
      • Сумма градиентов каждой цели.
       х = tf.Variable(2.0)
      с tf.GradientTape() в качестве ленты:
        у0 = х**2
        у1 = 1/х
      печать (лента.градиент ({'y0': y0, 'y1': y1}, x).numpy())
       
      3,75
       

      Аналогично, если цель(и) не являются скалярными, вычисляется градиент суммы:

       x = tf.Variable(2.)
      с tf.GradientTape() в качестве ленты:
        у = х * [3., 4.]
      печать (лента.градиент (y, x).numpy())
       
      7,0
       

      Это упрощает получение градиента суммы набора потерь или градиента суммы поэлементного расчета потерь.

      Если вам нужен отдельный градиент для каждого элемента, обратитесь к якобианам.

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

       х = tf.linspace(-10.0, 10.0, 200+1)
      с tf.GradientTape() в качестве ленты:
        лента. часы(х)
        y = tf.nn.sigmoid(x)
      dy_dx = лента.градиент(у, х)
       
       plt.plot(x, y, label='y')
      plt.plot(x, dy_dx, метка='dy/dx')
      plt.legend()
      _ = plt.xlabel('x')
       

      Поток управления

      Поскольку градиентная лента записывает операции по мере их выполнения, естественно обрабатывается поток управления Python (например, , если , и , а операторов).

      Здесь используется отдельная переменная для каждой ветви если . Градиент соединяется только с используемой переменной:

       x = tf.constant(1.0)
      v0 = tf.Переменная(2.0)
      v1 = tf.Переменная(2.0)
      с tf.GradientTape(persistent=True) в качестве ленты:
        лента.часы(х)
        если х > 0,0:
          результат = v0
        еще:
          результат = v1**2
      dv0, dv1 = лента.градиент (результат, [v0, v1])
      печать (dv0)
      печать (дв1)
       
      tf. Tensor(1.0, shape=(), dtype=float32)
      Никто
       

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

      В зависимости от значения x в приведенном выше примере на ленту записывается либо результат = v0 , либо результат = v1**2 . Градиент относительно x всегда равен None .

       dx = лента.градиент(результат, х)
      печать (дх)
       
      Никто
       

      Случаи, когда

      градиент возвращает Нет

      Когда цель не подключена к источнику, градиент возвращает Нет .

       x = tf.Variable(2.)
      y = tf.Переменная(3.)
      с tf.GradientTape() в качестве ленты:
        г = у * у
      печать (лента.градиент (z, x))
       
      Никто
       

      Здесь z явно не связано с x , но есть несколько менее очевидных способов отключения градиента.

      1. Заменена переменная на тензор

      В разделе «управление тем, что смотрит лента» вы видели, что лента будет автоматически смотреть tf. Переменная , а не тс.Тензор .

      Одной из распространенных ошибок является непреднамеренная замена tf.Variable на tf.Tensor вместо использования Variable.assign для обновления tf. Variable . Вот пример:

       x = tf.Variable(2.0)
      для эпохи в диапазоне (2):
        с tf.GradientTape() в качестве ленты:
          у = х+1
        print(type(x).__name__, ":", tape.gradient(y, x))
        x = x + 1 # Это должно быть `x.assign_add(1)`
       
      ResourceVariable : tf.Tensor(1.0, shape=(), dtype=float32)
      EagerTensor : Никто
       

      2. Выполнял расчеты вне TensorFlow

      Лента не может записать траекторию градиента, если расчет выходит за пределы TensorFlow. Например:

       x = tf.Variable([[1.0, 2.0],
                       [3.0, 4.0]], dtype=tf.float32)
      с tf.GradientTape() в качестве ленты:
        х2 = х**2
        # Этот шаг рассчитывается с помощью NumPy
        y = np.mean (x2, ось = 0)
        # Как и большинство операций, reduce_mean преобразует массив NumPy в постоянный тензор
        # используя `tf.convert_to_tensor`.
        у = tf.reduce_mean (у, ось = 0)
      печать (лента. градиент (у, х))
       
      Никто
       

      3. Взял градиенты через целое число или строку

      Целые числа и строки не дифференцируемы. Если путь расчета использует эти типы данных, градиента не будет.

      Никто не ожидает, что строки будут дифференцируемыми, но легко случайно создать константу или переменную int , если не указать dtype .

       х = tf.константа (10)
      с tf.GradientTape() как g:
        г.часы(х)
        у = х * х
      печать (г.градиент (у, х))
       
      ВНИМАНИЕ:tensorflow:тип dtype наблюдаемого тензора должен быть плавающим (например, tf.float32), получил tf.int32
      ВНИМАНИЕ:tensorflow:тип dtype целевого тензора должен быть плавающим (например, tf.float32) при вызове GradientTape.gradient, получил tf.int32
      ВНИМАНИЕ:tensorflow:тип dtype исходного тензора должен быть плавающим (например, tf. float32) при вызове GradientTape.gradient, получил tf.int32
      Никто
       

      TensorFlow не выполняет автоматическое приведение типов, поэтому на практике вы часто будете получать ошибку типа вместо отсутствующего градиента.

      4. Получение градиентов через объект с состоянием

      Состояние останавливает градиенты. Когда вы читаете из объекта с состоянием, лента может отслеживать только текущее состояние, а не историю, которая привела к нему.

      A tf.Tensor неизменяем. Вы не можете изменить тензор после его создания. Он имеет значение , но не состояние . Все рассмотренные до сих пор операции также не имеют состояния: вывод tf.matmul зависит только от его входных данных.

      А tf. Переменная имеет внутреннее состояние — ее значение. Когда вы используете переменную, считывается состояние. Вычисление градиента относительно переменной является нормальным явлением, но состояние переменной блокирует вычисление градиента от более глубокого просчета. Например:

       x0 = tf.Variable(3.0)
      x1 = tf.Переменная (0,0)
      с tf.GradientTape() в качестве ленты:
        # Обновление x1 = x1 + x0.
        x1.assign_add(x0)
        # Лента начинает запись с x1.
        у = х1**2 # у = (х1 + х0)**2
      # Это не работает.
      print(tape.gradient(y, x0)) #dy/dx0 = 2*(x1 + x0)
       
      Никто
       

      Аналогично, итераторов tf.data.Dataset и tf.queue имеют состояние и останавливают все градиенты на тензорах, которые проходят через них.

      Градиент не зарегистрирован

      Some tf.Operation s зарегистрированы как недифференцируемые и вернут None . У других градиент не зарегистрирован .

      На странице tf.raw_ops показано, какие низкоуровневые операции имеют зарегистрированные градиенты.

      Если вы попытаетесь получить градиент через операцию с плавающей запятой, в которой не зарегистрирован градиент, лента выдаст ошибку вместо молчаливого возврата None . Так вы узнаете, что что-то пошло не так.

      Например, функция tf.image.adjust_contrast оборачивает raw_ops.AdjustContrastv2 , который может иметь градиент, но градиент не реализован:

       image = tf.Variable([[[0.5, 0.0, 0.0] ]])
      дельта = tf.Переменная (0,1)
      с tf.GradientTape() в качестве ленты:
       new_image = tf.image.adjust_contrast (изображение, дельта)
      пытаться:
       печать (лента.градиент (новое_изображение, [изображение, дельта]))
       assert False # Этого не должно происходить.

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

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