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


Переносное заземление: требования, порядок установки

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

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

Что это такое, и почему его называют временным (переносным)

Оборудование относится к типу защитных устройств, обеспечивающих безопасную работу в подключенных электроустановках. Кроме того, переносное заземление может (а точнее — должно) применяться при выполнении работ в полевых условиях: на временных объектах, которые штатного соединения с «землей» не имеют. Например, при проведении сварочных работ на территории, где нет энергоснабжения, и площадка не оборудована в соответствие с Правилами устройства электроустановок. В этом случае заземляется и генерирующее и рабочее оборудование.

Комплект временного заземления представляет собой набор гибких медных проводников (кабель без изоляции). На концах проводников расположены зажимы с постоянной фиксацией: типа струбцин.

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

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

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

Важно! Применять переносное заземление без защитного оборудования (предохранителей, автоматов) на питающей линии, бессмысленно и опасно. При коротком замыкании на «землю», первичная защита персонала будет обеспечена, но возможно возгорание силового кабеля и электроустановки. Кабель заземления также может перегореть под продолжительным воздействием электрического тока, и работники будут поражены неконтролируемым напряжением.

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

Какие требования предъявляются к оборудованию

  • Проводники должны быть цельными на всем протяжении между зажимами, без сростков и калышков (петлеобразных завитков, образованных при перекручивании).
  • Использование изолированных проводов запрещено! Под оболочкой сложно контролировать возможные повреждения токоведущей жилы.
  • Сечение кабеля одинаковое по всей длине. Для электроустановок до 1000 В, не меньше 16 мм², выше 1000 В — 25 мм².
  • Длина проводников подбирается таким образом, чтобы можно было соединить шину заземления и заземляемые участки без натяжения кабеля. После подключения он не должен быть в подвешенном состоянии (за исключением точек заземления, находящихся на значительной высоте: например, линий электропередач).
  • Провода должны выдерживать динамические нагрузки на разрыв, и не нагреваться до температуры расплавления при протекании тока короткого замыкания (по крайней мере, до срабатывания защитных устройств на размыкание силовых линий).
    Сечение провода по параметрам короткого замыкания можно рассчитать самостоятельно по формуле:

    где Iкз — это ток короткого замыкания, а tзащиты — максимально возможное время срабатывания автомата аварийного отключения электропитания.
  • Длина изолирующих штанг должна обеспечивать безопасное наложение зажимов без приближения (а тем более касания) оператора к потенциально опасным токоведущим шинам.
  • Зажимы должны обеспечивать надежное соединение, иметь винтовую затяжку (пружинные клещи недопустимы). Материал, при повышении температуры во время цикла короткого замыкания, не должен терять прочность и образовывать окалину в месте контакта. При затягивании зажима с рабочим усилием, деформация не должна приводить к ухудшению контакта.
  • Соединение зажимов с проводниками производится методом опрессовки либо сварки. Допускается соединение с помощью гайки, после чего необходимо пропаять место контакта тугоплавким припоем. Соединение только с помощью пайки запрещено, поскольку при высоких температурах возможно расплавление припоя и отсоединение заземлителя.

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

Порядок установки временного заземления

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

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

Дальнейшие работы выполняются строго в указанной последовательности:

  1. Центральный, или общий (при работе с трехфазным заземлителем) зажим крепится на действующую и проверенную шину заземления.
  2. Индикатором проверяется отсутствие напряжения на токоведущей шине.
  3. Непосредственно после проверки производится контрольное касание зажимом токоведущей шины, после чего проводник надежно закрепляется.

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

Разумеется, к работе допускается только квалифицированный персонал.

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

Порядок снятия переносного заземления

  1. Необходимо убедиться в отсутствии напряжения на заземленных частях.
  2. Отсоединить зажимы от электроустановки.
  3. Отсоединить зажим от действующей шины заземления.

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

Что делать, если штатное защитное заземление отсутствует

Если работы выполняются на незаземленной (штатно) электроустановке, необходимо создать временный контур заземления. Для этого организуется тот самый треугольник, в соответствии с правилами организации защитного заземлителя. К нему присоединяется переносное заземление.

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

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

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

Заземление линий электропередач на столбах

Переносное заземление, предназначенное для ЛЭП, отличается от «наземных» вариантов наличием длинных изолированных штанг. Кроме того, на рабочих концах установлены не винтовые зажимы, а захватные крюки с фиксаторами.

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

Учитывая отсутствие винтовых зажимов, и, как следствие, менее надежный контакт с токонесущим проводом, устанавливаются дублирующие заземления: по 2–3 комплекта на один высоковольтный провод.

Монтаж производится с земли: то есть оператор стоит на грунте, а не устанавливает заземление со столба.

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

Определения

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

Заземляющий проводник — переносной или стационарно установленный провод (шина), предназначенный для соединения заземлителя с заземляемым устройством.

Видео по теме

Хорошая реклама

 

sql - Использование последовательности для вставки

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

.

последовательностей | Документация Chatfuel

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

Последовательности могут быть созданы на вкладке Automate . Сначала вы создаете последовательность и хотя бы один блок в ней.Затем заполните блоки содержимым по вашему выбору и установите время, в течение которого блоки последовательности будут отправлены подписанному пользователю в раскрывающемся меню. Чтобы начать отправку сообщений последовательности пользователям, вам необходимо подписать их на последовательность (см. Раздел ниже).

Обратите внимание, что пока вы настраиваете последовательность и ваш бот находится в сети, вы должны установить время ВЫКЛ для всех блоков в нем.

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

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

Подписка пользователей на последовательности

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

Есть два способа подписать пользователей на последовательность:

Подписка на плагин Sequence

Есть удобный плагин под названием Subscribe to Sequence , который позволяет вам сделать именно это - поместите его в требуемый блок и просто введите имя последовательности, на которую вы хотите подписать пользователя.Таким образом вы можете указать, в какой момент разговора с вашим ботом пользователи должны начать получать отложенные сообщения из последовательности.

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

Подпишитесь вручную на вкладке "Люди" - функция Pro

Вы можете подписать группу пользователей на последовательность на вкладке "Люди".
Отфильтруйте пользователей, на которых вы хотите подписаться, щелкните раскрывающийся список и выберите «Подписаться на последовательность», затем выберите последовательность из списка.

Примеры

Напоминания

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

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

Ежедневные обновления

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

Отказ от подписки на последовательность

Отказ от подписки необходим только в том случае, если вы хотите запретить пользователю получать какие-либо обновления в середине последовательности. Нет необходимости отменять подписку пользователя в конце последовательности.

Отказ от подписки работает точно так же - для этого есть плагин:

Соблюдение политик обмена сообщениями

.

python - зачем нужны pad_sequences при использовании кодировки one_hot?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
.

Десятиминутное введение в последовательное обучение в Керасе

Пт 29 сентября 2017
Франсуа Шоле

В учебных пособиях.

Я часто вижу этот вопрос - как реализовать последовательное обучение RNN в Keras? Вот краткое введение.

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


Что такое последовательное обучение?

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

 «Кот сел на циновку» -> [модель Seq2Seq] -> «le chat etait assis sur le tapis» 

Это можно использовать для машинного перевода или для ответов на вопросы (создание ответа на естественном языке с учетом вопроса на естественном языке) - в общем, это применимо в любое время, когда вам нужно сгенерировать текст.

Есть несколько способов справиться с этой задачей: с использованием RNN или одномерных сверток.Здесь мы сосредоточимся на RNN.

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

Когда и входные, и выходные последовательности имеют одинаковую длину, вы можете реализовать такие модели просто с слой Keras LSTM или GRU (или их стек). Так обстоит дело в этот пример сценария который показывает, как научить RNN научиться складывать числа, закодированные как строки символов:

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

Общий случай: каноническая последовательность-последовательность

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

  • Уровень RNN (или его стек) действует как «кодировщик»: он обрабатывает входную последовательность и возвращает собственное внутреннее состояние. Обратите внимание, что мы отбрасываем выходы кодировщика RNN, только восстанавливая состояние. Это состояние будет служить «контекстом» или «условием» декодера на следующем этапе.
  • Другой уровень RNN (или его стек) действует как «декодер»: он обучен предсказывать следующие символы целевой последовательности, учитывая предыдущие символы целевой последовательности.В частности, он обучен превращать целевые последовательности в те же последовательности, но со смещением на один временной шаг в будущем, процесс обучения в данном контексте называется «принуждением учителя». Важно отметить, что кодировщик использует в качестве начального состояния векторы состояния от кодировщика, именно так декодер получает информацию о том, что он должен генерировать. Фактически, декодер учится генерировать целей [t + 1 ...] задано целей [... t] , обусловлено входной последовательностью .

В режиме вывода, т.е. когда мы хотим декодировать неизвестные входные последовательности, мы проходим немного другой процесс:

  • 1) Кодировать входную последовательность в векторы состояния.
  • 2) Начните с целевой последовательности размера 1 (только символ начала последовательности).
  • 3) Загрузите векторы состояния и целевую последовательность из 1 символа в декодер для прогнозирования следующего символа.
  • 4) Выберите следующий символ, используя эти предсказания. (мы просто используем argmax).
  • 5) Добавить выбранный символ в целевую последовательность
  • 6) Повторяйте, пока мы не сгенерируем символ конца последовательности или достигните предела символов.

Тот же процесс можно также использовать для обучения сети Seq2Seq без «принудительного принуждения учителя», т.е. путем повторного ввода предсказаний декодера в декодер.

Пример Keras

Проиллюстрируем эти идеи реальным кодом.

Для нашего примера реализации мы будем использовать набор данных пар английских предложений и их французского перевода, который вы можете скачать с сайта manythings.org / anki. Файл для загрузки называется fra-eng.zip . Мы реализуем модель «последовательность-последовательность» уровня символов , обрабатывая входной символ за символом и генерируя вывод посимвольно. Другой вариант - модель на уровне слов, которая обычно более распространена для машинного перевода. В конце этого поста вы найдете некоторые заметки о превращении нашей модели в модель на уровне слов с использованием Embedding слоев.

Полный скрипт для нашего примера можно найти на GitHub.

Вот краткое изложение нашего процесса:

  • 1) Превратите предложения в 3 массива Numpy, encoder_input_data , decoder_input_data , decoder_target_data :
    • encoder_input_data - это трехмерный массив формы (num_pairs, max_english_sentence_length) содержащие горячую векторизацию английских предложений.
    • decoder_input_data - это трехмерный массив формы (num_pairs, max_french_sentence_length, num_french_characters) с горячей векторизацией французских предложений.
    • decoder_target_data то же самое, что и decoder_input_data , но смещение на один временной шаг . decoder_target_data [:, t,:] будет таким же, как decoder_input_data [:, t + 1,:] .
  • 2) Обучите базовую модель Seq2Seq на основе LSTM для прогнозирования decoder_target_data задано encoder_input_data и decoder_input_data . В нашей модели используется принуждение учителя.
  • 3) Расшифруйте несколько предложений, чтобы убедиться, что модель работает (т.е.е. повернуть образцы из encoder_input_data в соответствующие отсчеты из decoder_target_data ).

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

Это наша обучающая модель. Он использует три ключевые особенности Keras RNN:

  • Аргумент конструктора return_state , конфигурирующий уровень RNN для возврата списка, в котором первая запись - это выходы, а следующие записи - внутренние состояния RNN.Это используется для восстановления состояний кодировщика.
  • Аргумент вызова inital_state , определяющий начальное состояние (состояния) RNN. Это используется для передачи состояний кодировщика в декодер в качестве начальных состояний.
  • Аргумент конструктора return_sequences , настраивающий RNN для возврата его полного последовательность выходных данных (вместо только последнего выхода, что по умолчанию). Это используется в декодере.
 от keras.models импортная модель из кераса.импорт слоев Input, LSTM, Dense # Определить входную последовательность и обработать ее. encoder_inputs = Вход (shape = (None, num_encoder_tokens)) кодировщик = LSTM (латентный_размер, return_state = True) encoder_outputs, state_h, state_c = encoder (encoder_inputs) # Мы отбрасываем `encoder_outputs` и сохраняем только состояния. encoder_states = [state_h, state_c] # Настроить декодер, используя `encoder_states` в качестве начального состояния. decoder_inputs = Вход (shape = (None, num_decoder_tokens)) # Мы настраиваем наш декодер на возврат полных выходных последовательностей, # а также для возврата внутренних состояний.Мы не используем # возвращаем состояния в обучающей модели, но мы будем использовать их для вывода. decoder_lstm = LSTM (latent_dim, return_sequences = True, return_state = True) decoder_outputs, _, _ = decoder_lstm (decoder_inputs, initial_state = encoder_states) decoder_dense = плотный (num_decoder_tokens, активация = 'softmax') decoder_outputs = decoder_dense (decoder_outputs) # Определите модель, которая повернется # `encoder_input_data` &` decoder_input_data` в `decoder_target_data` model = Модель ([encoder_inputs, decoder_inputs], decoder_outputs) 

Мы обучаем нашу модель в две линии, отслеживая потери на удерживаемом наборе из 20% образцов.

 # Выполнить обучение model.compile (optimizer = 'rmsprop', loss ='ategorical_crossentropy ') model.fit ([encoder_input_data, decoder_input_data], decoder_target_data, batch_size = размер_пакета, эпохи = эпохи, validation_split = 0,2) 

Примерно через час работы с процессором MacBook мы готовы к заключению. Чтобы расшифровать тестовое предложение, повторно:

  • 1) Кодировать входное предложение и получить начальное состояние декодера
  • 2) Выполните один шаг декодера с этим начальным состоянием и маркером «начала последовательности» в качестве цели.На выходе будет следующий целевой символ.
  • 3) Добавьте предсказанный целевой символ и повторите.

Вот наша установка вывода:

 encoder_model = Модель (encoder_inputs, encoder_states) decoder_state_input_h = Вход (shape = (latent_dim,)) decoder_state_input_c = Вход (shape = (latent_dim,)) decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c] decoder_outputs, state_h, state_c = decoder_lstm ( decoder_inputs, initial_state = decoder_states_inputs) decoder_states = [state_h, state_c] decoder_outputs = decoder_dense (decoder_outputs) decoder_model = Модель ( [decoder_inputs] + decoder_states_inputs, [decoder_outputs] + decoder_states) 

Мы используем его для реализации цикла вывода, описанного выше:

 def decode_sequence (input_seq): # Кодировать ввод как векторы состояния.state_value = encoder_model.predict (input_seq) # Создать пустую целевую последовательность длиной 1. target_seq = np.zeros ((1, 1, num_decoder_tokens)) # Заполните первый символ целевой последовательности начальным символом. target_seq [0, 0, target_token_index ['\ t']] = 1. # Цикл выборки для пакета последовательностей # (для упрощения мы предполагаем, что партия имеет размер 1). stop_condition = Ложь decoded_sentence = '' пока не stop_condition: output_tokens, h, c = decoder_model.предсказать ( [target_seq] + state_value) # Образец токена sampled_token_index = np.argmax (output_tokens [0, -1,:]) sampled_char = reverse_target_char_index [sampled_token_index] decoded_sentence + = sampled_char # Условие выхода: либо достигнуть максимальной длины # или найдите стоп-символ. если (sampled_char == '\ n' или len (decoded_sentence)> max_decoder_seq_length): stop_condition = True # Обновить целевую последовательность (длиной 1).target_seq = np.zeros ((1, 1, num_decoder_tokens)) target_seq [0, 0, sampled_token_index] = 1. # Обновить состояния State_value = [h, c] вернуть decoded_sentence 

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

 Входное предложение: Будьте вежливы. Расшифрованная фраза: Soyez gentil! - Входное предложение: Брось! Расшифрованный приговор: Laissez tomber! - Введите предложение: Выходи! Расшифрованное предложение: Сортез! 

На этом мы завершаем наше десятиминутное введение в модели «последовательность-последовательность» в Keras.Напоминание: полный код этого скрипта можно найти на GitHub.

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


Бонус FAQ

Что, если я хочу использовать уровень GRU вместо LSTM?

На самом деле это немного проще, потому что GRU имеет только одно состояние, тогда как LSTM имеет два состояния. Вот как адаптировать модель обучения для использования слоя GRU:

 encoder_inputs = Вход (shape = (None, num_encoder_tokens)) Encoder = GRU (latent_dim, return_state = True) encoder_outputs, state_h = encoder (encoder_inputs) decoder_inputs = Вход (shape = (None, num_decoder_tokens)) decoder_gru = ГРУ (латентный_дим, return_sequences = Истина) decoder_outputs = decoder_gru (decoder_inputs, initial_state = state_h) decoder_dense = плотный (num_decoder_tokens, активация = 'softmax') decoder_outputs = decoder_dense (decoder_outputs) model = Модель ([encoder_inputs, decoder_inputs], decoder_outputs) 

Что, если я хочу использовать модель на уровне слов с целочисленными последовательностями?

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

 # Определите входную последовательность и обработайте ее. encoder_inputs = Вход (форма = (Нет,)) x = Встраивание (num_encoder_tokens, latent_dim) (encoder_inputs) x, state_h, state_c = LSTM (латентный_дим, return_state = Истина) (x) encoder_states = [state_h, state_c] # Настроить декодер, используя `encoder_states` в качестве начального состояния.decoder_inputs = Вход (форма = (Нет,)) x = Встраивание (num_decoder_tokens, latent_dim) (decoder_inputs) x = LSTM (latent_dim, return_sequences = True) (x, initial_state = encoder_states) decoder_outputs = Плотный (num_decoder_tokens, Activation = 'softmax') (x) # Определите модель, которая повернется # `encoder_input_data` &` decoder_input_data` в `decoder_target_data` model = Модель ([encoder_inputs, decoder_inputs], decoder_outputs) # Скомпилировать и запустить обучение model.compile (optimizer = 'rmsprop', loss ='ategorical_crossentropy ') # Обратите внимание, что decoder_target_data нужно закодировать в горячем режиме, # вместо последовательностей целых чисел, таких как `decoder_input_data`! модель.подходят ([encoder_input_data, decoder_input_data], decoder_target_data, batch_size = размер_пакета, эпохи = эпохи, validation_split = 0,2) 

Что делать, если я не хочу использовать принуждение учителя для обучения?

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

Вы можете добиться этого, построив модель, которая жестко кодирует выходной цикл обратной инжекции:

 из keras.layers import Lambda из keras импортировать бэкэнд как K # Первая часть без изменений encoder_inputs = Вход (shape = (None, num_encoder_tokens)) кодировщик = LSTM (латентный_размер, return_state = True) encoder_outputs, state_h, state_c = encoder (encoder_inputs) состояния = [state_h, state_c] # Настроить декодер, который будет обрабатывать только один временной шаг за раз. decoder_inputs = Вход (shape = (1, num_decoder_tokens)) decoder_lstm = LSTM (latent_dim, return_sequences = True, return_state = True) decoder_dense = плотный (num_decoder_tokens, активация = 'softmax') all_outputs = [] входы = decoder_inputs для _ в диапазоне (max_decoder_seq_length): # Запускаем декодер на одном временном шаге выходы, state_h, state_c = decoder_lstm (входы, initial_state = состояния) output = decoder_dense (выходы) # Сохранить текущий прогноз (мы объединим все прогнозы позже) all_outputs.добавить (выходы) # Повторно вводим выходные данные как входные для следующей итерации цикла # а также обновить состояния входы = выходы состояния = [state_h, state_c] # Объединить все прогнозы decoder_outputs = Лямбда (лямбда x: K.concatenate (x, axis = 1)) (all_outputs) # Определить и скомпилировать модель, как раньше model = Модель ([encoder_inputs, decoder_inputs], decoder_outputs) model.compile (optimizer = 'rmsprop', loss ='ategorical_crossentropy ') # Подготовить входные данные декодера, которые содержат только начальный символ # Обратите внимание, что мы могли бы сделать это константой, жестко закодированной в модели decoder_input_data = np.нули ((num_samples, 1, num_decoder_tokens)) decoder_input_data [:, 0, target_token_index ['\ t']] = 1. # Обучите модель как раньше model.fit ([encoder_input_data, decoder_input_data], decoder_target_data, batch_size = размер_пакета, эпохи = эпохи, validation_split = 0,2) 

Если у вас есть другие вопросы, напишите в Twitter.

.

Смотрите также