Как сделать проходной выключатель из обычного


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

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

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

Принцип работы проходного выключателя

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

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

Рисунок 1: принцип действия проходного выключателя

Как видите, на схеме от электрической проводки к выключателям подключается  фазный провод, а нулевой ведется напрямую к лампе или другому осветительному оборудованию. Если проследить подсоединение от распределительной коробки, то фаза подводится к вводу первого проходного выключателя. Далее двумя независимыми проводами выводы А и Б первого устройства соединяются с одноименными выводами второго коммутатора.  От выходной клеммы второго выключателя фаза подается к выводу лампы. Второй вывод лампы соединяется нулевым проводом.

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

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

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

Способ №1. Двухклавишный переключатель

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

Рис. 2. Двухклавишная модель проходного выключателя

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

Собрав все необходимое, выполните такую последовательность действий:

  1. Отключите напряжение на щитке при помощи автоматического выключателя – это предотвратит поражение электротоком при монтажных работах. Будет надежнее, если одновременно вы отключите и нулевой и фазный проводник для соответствующего светильника.
  2. Подключите первый из двухклавишных переключателей к фазному проводу трехжильного кабеля. Для этого отпустите клемму на выключателе и заведите туда жилу. Зажимается жила до получения надежного контакта с минимальным сопротивлением электрическому току.
  3. К каждому из выходных контактов также подключите по проводу. Далее проведите их к выходным контактам второго двухклавишного выключателя.
  4. От вводной клеммы второго коммутатора отведите провод к прибору освещения.

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

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

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

Способ №2. Одноклавишный переключатель

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

Порядок изготовления проходного выключателя с одной клавишей заключается в следующем:

  1. Перед выполнением монтажных работ обязательно отключите электропитание на соответствующем участке цепи. Если вы отключаете только один автомат, обязательно проверьте отсутствие напряжение индикатором.
  2. Если вы собираетесь снять действующий выключатель из коробки, сначала снимите фальшпанель и удалите фиксаторы. Затем ослабьте узлы крепления в коробке, достаньте сердцевину. Открутите провода подключения и удалите коммутатор из цепи освещения.
  3. Если вы используете новый выключатель, можете пропустить предыдущий пункт. Тогда сразу переходите к демонтажу электрических контактов с полимерного или керамического основания.
  4. При помощи отвертки разберите устройство, отделите металлические пластины – перекидные контакты.
Рис. 3. Разберите выключатель

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

  • На керамическом или полимерном основании расположены неподвижные контакты. Одни из них потребуется развернуть на 180°, чтобы при переключении клавиши замыкался второй контакт.
Рис. 4: разверните один из контактов

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

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

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

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

Видео идеи

Проходной выключатель как сделать. Самая простая схема подключения проходного выключателя


Watch this video on YouTube

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


Watch this video on YouTube

Переход с обычного на прямой фонд

1. Прямые и регулярные планы

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

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

2. Как перейти с обычного на прямой фонд?

а. Онлайн

Войдите в свой счет паевого инвестиционного фонда - либо AMC предоставляет его, либо вы можете получить к нему доступ через агентства, такие как CAMS или KARVY.Посетите страницу транзакции, где вы можете купить, изменить или выкупить свои фонды. Выберите вариант «переключить», а затем щелкните название соответствующего фонда. У него будет опция «Прямой план», нажмите на нее и следуйте инструкциям, как показано. Чтобы отразить изменение, потребуется около четырех рабочих дней.

г. Офлайн

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

Инвестируйте в лучшие паевые инвестиционные фонды

Инвестируйте в 7 минут | Бесплатно | 100% онлайн | Простота использования | Сейф

3. Почему нужно переходить с обычного плана на прямой?

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

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

4. Как перейти с прямого на обычный тарифный план?

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

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

5. Преимущества перехода с прямого плана на обычный

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

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

6. Стоит ли переходить с одного на другой?

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

7. Почему стоит инвестировать с ClearTax?

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

Инвестируйте в лучшие паевые инвестиционные фонды

Инвестируйте в 7 минут | Бесплатно | 100% онлайн | Простота использования | Сейф

.

Notes / english.md at master · changyihsin / Notes · GitHub

перейти к содержанию Зарегистрироваться
  • Почему именно GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграции
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • мобильный
    • Истории клиентов →
    • Безопасность →
  • Команда
  • Предприниматель
.

20% сквозной вычет для владельцев малого бизнеса

Обновлено 24 января 2019 г. в соответствии с окончательными рекомендациями, опубликованными IRS

Действует новый налоговый закон на 2018 налоговый год. Большое изменение - это создание совершенно нового налогового вычета для сквозного бизнеса. Вот основы, которые вам нужны, чтобы понять вычет по Разделу 199A.

Что такое вычет по статье 199A?

Это официальное название 20-процентного сквозного вычета.Иными словами, это официально называется раздел 199A Закона о сокращении налогов и занятости.

Какой вычет вы можете получить?

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

Кто может получить вычет по статье 199A?

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

Что такое сквозной бизнес?

Транзитный бизнес - это любая компания:

  • Индивидуальное предпринимательство (бизнес с одним владельцем, в котором собственник лично владеет всеми активами)
  • Партнерство
  • Корпорация S
  • Общество с ограниченной ответственностью (ООО)
  • Товарищество с ограниченной ответственностью (ТОО)

Какие типы предприятия могут получить сквозной вычет?

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

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

Сотрудники не имеют права на сквозной вычет

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

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

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

Что такое конкретный сервисный бизнес или торговля?

IRS определяет «торговлю или бизнес с определенными услугами» как что-то, в котором участвуют предприятия в следующих областях:

  • Здравоохранение
  • Право
  • Бухгалтерский учет
  • Актуарное дело
  • Актуарное дело
  • Исполнительское искусство
  • Консультации
  • Легкая атлетика
  • Финансовые услуги
  • Инвестиции
  • Управление инвестициями

Могут ли предприятия, предоставляющие услуги, получить этот вычет?

Владельцы бизнеса, предоставляющего определенные услуги, получают полный сквозной вычет, если их налогооблагаемый доход ниже 157 500 долларов (подача как холостая) или 315 000 долларов (состоящих в браке, подача совместно).

Если ваш налогооблагаемый доход превышает 157 500 долларов США / 315 000 долларов США, вычет прекращается.

Вы не получаете сквозного вычета, если ваш налогооблагаемый доход превышает 415 000 долларов США (в браке) или 207 500 долларов США (в браке).

Можете ли вы выделить не связанные с обслуживанием функции и вычесть за них?

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

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

Может ли арендодатель претендовать на сквозной вычет?

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

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

Чтобы помочь мелким домовладельцам, IRS ввело специальное правило. Если арендодатель и его или ее сотрудники, агенты и независимые подрядчики затрачивают не менее 250 часов в год на предоставление услуг по аренде, такая деятельность будет считаться бизнесом для целей сквозного вычета.

Имеете ли вы право на сквозной вычет?

Сквозной вычет позволяет квалифицированным владельцам бизнеса вычитать из своих налогов на прибыль до 20 процентов прибыли своего бизнеса.Например, если в 2018 году у вас была прибыль от бизнеса в размере 100000 долларов, вы можете вычесть до 20000 долларов.

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

Как рассчитать вычет по статье 199A

Сквозной вычет позволяет квалифицированным владельцам бизнеса вычитать из своих налогов на прибыль до 20 процентов прибыли своего бизнеса.

Для расчета вычета определите свой налогооблагаемый доход. Эта сумма представляет собой ваш общий доход из всех источников за вычетом всех ваших отчислений.

Если ваш налогооблагаемый доход ниже 157 500 долларов, ваш вычет по Разделу 199A будет равен 20 процентам вашего квалифицированного коммерческого дохода (QBI). Этот лимит составляет 315 000 долларов, если вы состоите в браке и подаете документы совместно. В результате получается максимально возможный сквозной вычет.

Пример: Том не женат и ведет свой бизнес как индивидуальное предприятие.Его компания зарабатывает 100 000 долларов квалифицированного коммерческого дохода, а общий налогооблагаемый доход за год составляет 120 000 долларов.

Процентный вычет Тома составляет 20 процентов x 100 000 долларов QBI = 20 000 долларов. Таким образом, он может вычесть 20 000 долларов из подоходного налога.

Если ваш налогооблагаемый доход находится в пределах пороговых значений 315 000/157 500 долларов, это все, что нужно для сквозного вычета.

Что делать, если я сделаю больше порога?

Расчет сквозного вычета намного сложнее, если ваш совокупный налогооблагаемый доход превышает 315 000 долларов.Как и в случае подачи совместной налоговой декларации супружескими парами. Или вы холост, и ваш налогооблагаемый доход превышает 157 500 долларов.

Во-первых, ограничение, основанное на том, сколько вы платите своим сотрудникам или сколько собственности, используемой в бизнесе, вводится поэтапно. Как только ваш налогооблагаемый доход достигнет 415 000 долларов (в браке) или 207 500 долларов (одинокий), ваш сквозной вычет не может превышать большего из:

  • (1) Пятьдесят процентов заработной платы сотрудников W-2, выплачиваемых вашим предприятием, или
  • (2) Двадцать пять процентов заработной платы W-2, PLUS 2.5 процентов от первоначальной покупной цены долгосрочной собственности, используемой для получения дохода, например, реальных активов или оборудования, используемых в бизнесе.

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

.

Понимание PyTorch на примере: пошаговое руководство | Дэниел Годой

Фото Аллена Кая на Unsplash
Обновление

(15 июля 2020 г.): Сегодня я выпустил первых двух глав моей книги: Глубокое обучение с помощью PyTorch Пошаговое руководство: Руководство для начинающих .

Обновление (2 сентября 2020 г.): Опубликована новая глава: «Классный стиль».

PyTorch - это самая быстрорастущая среда Deep Learning , которая также используется Fast.ai в его MOOC, Deep Learning for Coders и его библиотеке.

PyTorch также очень похож на pythonic , что означает, что его более естественно использовать, если вы уже являетесь разработчиком Python.

Кроме того, использование PyTorch может даже улучшить ваше здоровье. , по словам Андрея Карпати :-)

Существует , множество многих руководств по PyTorch, и его документация довольно полная и обширная. Итак, , почему вам следует продолжать читать это пошаговое руководство?

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

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

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

Большинство руководств начинается с красивой и красивой задачи классификации изображений , чтобы проиллюстрировать, как использовать PyTorch. Это может показаться крутым, но я считаю, что отвлекает вас от основной цели : как работает PyTorch ?

По этой причине в этом руководстве я остановлюсь на простой и знакомой проблеме: линейная регрессия с одним элементом x ! Это не может быть намного проще… Модель простой линейной регрессии

Создание данных

Давайте начнем с , генерируя некоторых синтетических данных: мы начнем с вектора из 100 точек для нашей функции x и создадим наши метки с использованием a = 1 , b = 2 и некоторого гауссова шума.

Затем давайте разделим наших синтетических данных на наборов и для проверки, перетасовывая массив индексов и используя первые 80 перемешанных точек для обучения.

Создание синтетических наборов поездов и проверок для линейной регрессии Рисунок 1: Синтетические данные - Наборы обучения и проверки

Мы знаем , что a = 1 и b = 2, но теперь давайте посмотрим, насколько близко мы можем приблизиться к истинным значениям, используя градиентный спуск и 80 точек в обучении набор

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

Шаг 1. Вычислить потерю

Для задачи регрессии потеря определяется среднеквадратичной ошибкой (MSE) , то есть средним значением всех квадратов разностей между метками (y) и предсказания (a + bx).

Стоит отметить, что если мы используем всех точек в обучающем наборе ( N ) для вычисления потерь, мы выполняем пакетный градиентный спуск .Если бы мы использовали единую точку каждый раз, это был бы стохастический градиентный спуск . Все остальное (n) между 1 и N характеризует градиентный спуск mini-batch .

Потеря: среднеквадратичная ошибка (MSE)

Шаг 2: Вычислить градиенты

Градиент - это частная производная - почему частичное ? Потому что его вычисляют относительно (относительно) одиночного параметра .У нас есть два параметра: a и b , поэтому мы должны вычислить две частные производные.

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

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

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

Шаг 3: Обновление параметров

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

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

Обновление коэффициентов a и b с использованием вычисленных градиентов и скорости обучения

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

Шаг 4: Промыть и повторить!

Теперь мы используем обновленные параметры , чтобы вернуться к Шагу 1 и перезапустить процесс.

Эпоха считается завершенной, если каждая точка уже была использована для вычисления потерь . Для пакетного градиентного спуска это тривиально, так как он использует все точки для вычисления потерь - одна эпоха то же самое, что одно обновление .Для стохастического градиентного спуска одна эпоха означает N обновлений , а для мини-пакета (размера n) одна эпоха имеет N / n обновлений .

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

Пришло время реализовать нашу модель линейной регрессии с использованием градиентного спуска с использованием Numpy только .

Подождите ... Я думал, что это руководство о PyTorch!

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

Для обучения модели есть два шага инициализации :

  • Случайная инициализация параметров / весов (у нас всего два, , и b ) - строки 3 и 4;
  • Инициализация гиперпараметров (в нашем случае только скорость обучения и количество эпох ) - строки 9 и 11;

Убедитесь, что всегда инициализирует случайное начальное число , чтобы обеспечить воспроизводимость ваших результатов.Как обычно, случайное начальное число равно 42, наименьшее случайное число из всех случайных начальных чисел, которые можно было бы выбрать :-)

Для каждой эпохи есть четырех шага обучения :

  • Прогнозы вычислительной модели - это прямой проход - строка 15;
  • Вычислить потери, используя прогнозы , и , метки и соответствующую функцию потерь для текущей задачи - строки 18 и 20;
  • Вычислить градиентов для каждого параметра - строки 23 и 24;
  • Обновить параметры - строки 27 и 28;

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

Реализация градиентного спуска для линейной регрессии с использованием Numpy

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

 # a и b после инициализации 
[0.49671415] [-0.1382643]
# a и b после нашего градиентного спуска
[1.02354094] [1.96896411]
# перехват и коэффициент из Scikit-Learn
[1.02354075] [1.96896447]

Они соответствуют до 6 знаков после запятой - у нас есть полностью работающая реализация линейной регрессии с использованием Numpy.

Пора TORCH it :-)

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

В глубоком обучении мы везде видим тензора . Фреймворк Google не зря называется TensorFlow ! Что такое тензор вообще?

Tensor

В Numpy у вас может быть массив , который имеет трех измерений , верно? То есть, технически говоря, тензор .

Скаляр (одно число) имеет нулевых измерений, вектор имеет одно измерение , матрица имеет два измерения , а тензор имеет три или более измерений . Это оно!

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

Рисунок 2: Тензоры - это просто многомерные матрицы :-) Источник

Загрузка данных, устройств и CUDA

Как перейти от массивов Numpy к тензорам PyTorch ”, спросите вы? Вот для чего подходит from_numpy .Однако он возвращает тензор ЦП .

« Но я хочу использовать свой навороченный графический процессор… », - скажете вы. Не беспокойтесь, именно для этого подходит - () . Он отправляет ваш тензор на любое указанное вами устройство , включая ваш GPU (обозначаемый как cuda или cuda: 0 ).

« Что делать, если я хочу, чтобы мой код переключился на CPU, если графический процессор недоступен? ”, вы можете быть удивлены ... PyTorch снова получил поддержку - вы можете использовать cuda.is_available () , чтобы узнать, есть ли в вашем распоряжении графический процессор, и соответствующим образом настроить устройство.

Вы также можете легко преобразовать в более низкую точность (32-битное число с плавающей запятой), используя float () .

Загрузка данных: превращение массивов Numpy в тензоры PyTorch

Если вы сравните типов обеих переменных, вы получите то, что ожидали: numpy.ndarray для первого и torch.Tensor для второго один.

А где же «живет» ваш симпатичный тензор? В вашем процессоре или графическом процессоре? Вы не можете сказать… но если вы используете PyTorch type () , он покажет свое местоположение torch.cuda.FloatTensor - в данном случае тензор GPU.

Мы также можем пойти другим путем, превратив тензоры обратно в массивы Numpy, используя numpy () . Это должно быть просто, как x_train_tensor.numpy () , но

 Ошибка типа: невозможно преобразовать тензор CUDA в numpy. Используйте Tensor.cpu (), чтобы сначала скопировать тензор в память хоста. 

К сожалению, Numpy не может обрабатывать тензоры GPU… вам нужно сначала сделать их тензорами CPU, используя cpu () .

Создание параметров

Чем отличается тензор , используемый для данных - вроде тех, что мы только что создали - от тензора , используемого в качестве ( обучаемого ) параметра / веса ?

Последние тензоры требуют вычисления своих градиентов , поэтому мы можем обновить их значений (то есть значений параметров). Вот для чего подходит аргумент _grad = True .Он сообщает PyTorch, что мы хотим, чтобы он вычислял для нас градиенты.

У вас может возникнуть соблазн создать простой тензор для параметра, а затем отправить его на выбранное вами устройство, как мы это сделали с нашими данными, верно? Не так быстро…

Попытка создать переменные для коэффициентов…

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

 # FIRST 
тензор ([- 0,5531], requires_grad = True)
тензор ([- 0,7314], requires_grad = True)

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

 # ВТОРОЙ 
тензор ([0.5158], device = 'cuda: 0', grad_fn = ) тензор ([ 0,0246], device = 'cuda: 0', grad_fn = )

В третьем фрагменте мы сначала отправляем наши тензоры на устройство и , затем используем requires_grad_ () метод для установите его requires_grad на True на месте.

 # THIRD 
тензор ([- 0.8915], device = 'cuda: 0', requires_grad = True) тензор ([0.3616], device = 'cuda: 0', requires_grad = True)

В PyTorch, все методы что заканчивается символом подчеркивания ( _ ) вносит изменения на месте , то есть изменяет базовую переменную.

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

Фактическое создание переменных для коэффициентов :-)
 тензор ([0.6226], device = 'cuda: 0', requires_grad = True) tensor ([1.4505], device = 'cuda: 0', requires_grad = True) 

Много проще, правда?

Теперь, когда мы знаем, как создавать тензоры, требующие градиентов, давайте посмотрим, как PyTorch обрабатывает их - в этом роль…

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

Итак, как мы сообщаем PyTorch, что он выполняет свою задачу и вычисляет все градиенты ? Вот для чего подходит backward () .

Вы помните начальную точку для вычисления градиентов ? Это был убыток , так как мы рассчитали его частные производные относительно. наши параметры. Следовательно, нам нужно вызвать метод backward () из соответствующей переменной Python, например, loss.backward ().

Как насчет фактических значений из градиентов ? Мы можем проверить их, посмотрев на атрибут тензора grad .

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

Что означает знак подчеркивания ( _ ) в конце имени метода ? Ты помнишь? Если нет, вернитесь к предыдущему разделу и узнайте.

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

Вот и все? Ну, в значительной степени ... но всегда есть ловушка , и на этот раз она связана с обновлением параметров

В первой попытке, если мы используем ту же структуру обновления, что и в нашем Код Numpy , мы получим странную ошибку ниже ... но мы можем получить подсказку о том, что происходит, глядя на сам тензор - мы снова «потеряли» градиент при переназначении обновить результаты до наших параметров.Таким образом, атрибут grad оказывается None , что вызывает ошибку…

 # FIRST ATTEMPT 
тензор ([0.7518], device = 'cuda: 0', grad_fn = )
AttributeError: объект «NoneType» не имеет атрибута «zero_»

Затем мы немного изменим его, используя знакомое на месте присвоение Python во второй попытке. И снова PyTorch жалуется на это и выдает ошибку .

 # ВТОРАЯ ПОПЫТКА 
RuntimeError: конечная переменная, для которой требуется градиент, была использована в операции на месте.

Почему ?! Оказывается, случай «слишком много хорошего» . Виной всему является способность PyTorch построить динамический граф вычислений из каждой операции Python , которая включает любой тензор градиентных вычислений или его зависимости .

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

Итак, как мы сообщаем PyTorch «отступить» и позволяем обновлять наши параметры , не нарушая его модный график динамических вычислений ? Вот что такое фонарик.no_grad () подходит для. Это позволяет нам выполнять обычные операции Python над тензорами , независимо от графа вычислений PyTorch.

Наконец, нам удалось успешно запустить нашу модель и получить результирующих параметров . Разумеется, они соответствуют тем, которые мы получили в нашей реализации Numpy только для .

 # ТРЕТЬЯ ПОПЫТКА 
тензор ([1.0235], device = 'cuda: 0', requires_grad = True) tensor ([1.9690], device = 'cuda: 0', requires_grad = True)

«К сожалению, никто можно сказать, что такое граф динамических вычислений.Вы должны увидеть это сами ». Morpheus

Насколько хорош был « The Matrix »? Верно-верно? Но, шутки в сторону, хочу , вы с по тоже посмотрите график !

Пакет PyTorchViz и его метод make_dot (variable) позволяют легко визуализировать график, связанный с заданной переменной Python.

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

Вычисление MSE в три этапа

Если мы вызовем make_dot (yhat) , мы получим крайний левый , график на рисунке 3 ниже:

Рисунок 3: График вычислений для каждого шага в вычислении MSE

Давайте присмотритесь к его компонентам:

  • синих прямоугольников : они соответствуют тензорам , которые мы используем в качестве параметров , тех, для которых мы просим PyTorch вычислить градиенты ;
  • серый ящик : операция Python , которая включает тензор вычисления градиента или его зависимости ;
  • зеленый прямоугольник : то же, что и серый прямоугольник, за исключением того, что это начальная точка для вычисления градиентов (при условии, что метод backward () вызывается из переменной , используемой для визуализации графика ) - они вычисляются от снизу вверх на графике.

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

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

Затем посмотрите на серый прямоугольник на том же графике: он выполняет умножение , а именно b * x . Но на него указывает только одна стрелка! Стрелка идет из поля blue , которое соответствует нашему параметру b .

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

Что произойдет с графом вычислений, если мы установим requires_grad на False для нашего параметра как ?

Рисунок 4: теперь градиент переменной a больше НЕ вычисляется. Но он ВСЕ ЕЩЕ используется в вычислении

. Неудивительно, что синего прямоугольника , соответствующего параметру , а больше нет! Достаточно просто: без градиентов, без графика .

Лучшее в графе динамических вычислений - это тот факт, что вы можете сделать его настолько сложным, насколько захотите .Вы даже можете использовать операторы потока управления от (например, операторы if) до , управляющие потоком градиентов (очевидно!) :-)

На рисунке 5 ниже показан пример этого. И да, я знаю, что само вычисление - это полностью ерунда

Рисунок 5: График сложных вычислений, чтобы подчеркнуть :-)

До сих пор мы вручную обновляли параметры с помощью вычисленных градиенты. Это, вероятно, нормально для с двумя параметрами … но что, если бы у нас было целиком из них ?! Мы используем один из оптимизаторов PyTorch , например SGD или Adam .

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

Кроме того, нам больше не нужно обнулять градиенты один за другим. Мы просто вызываем метод оптимизатора zero_grad () и готово!

В приведенном ниже коде мы создаем оптимизатор Stochastic Gradient Descent (SGD) для обновления наших параметров a и b .

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

Оптимизатор PyTorch в действии - больше не нужно обновлять параметры вручную!

Давайте проверим два наших параметра, до и после, чтобы убедиться, что все по-прежнему работает нормально:

 # BEFORE: a, b 
tenor ([0.6226], device = 'cuda: 0', requires_grad = True) тензор ([1.4505], device = 'cuda: 0', requires_grad = True)
# ПОСЛЕ: a, b
tenor ([1.0235], device = ' cuda: 0 ', requires_grad = True) тензор ([1.9690], device =' cuda: 0 ', requires_grad = True)

Круто! Мы оптимизировали процесс оптимизации :-) Что осталось?

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

Обратите внимание, что nn.MSELoss фактически создает для нас функцию потерь - это НЕ сама функция потерь . Кроме того, вы можете указать применяемый метод уменьшения , то есть , как вы хотите агрегировать результаты для отдельных точек - вы можете усреднить их (сокращение = 'среднее') или просто суммировать их (сокращение = 'сумма').

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

Теперь наш код выглядит так:

Потери PyTorch в действии - больше никаких ручных расчетов потерь!

На данный момент остается изменить только один фрагмент кода: предсказывает . Пришло время представить способ реализации PyTorch…

В PyTorch модель представлена ​​обычным Python-классом , который наследуется от класса Module .

Наиболее фундаментальные методы, которые необходимо реализовать:

.

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