Как обработать паяльной лампой смородину


Смородина в огне: действенный метод борьбы с клещом на смородине

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

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

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

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

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

И.Гузев, Тверская обл.

Комментарий специалиста

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

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

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

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

Е.Ярославцев

Оцените статью: Поделитесь с друзьями! Обеденный стол – его роль и место на даче Выращивание красной смородины по правилам

 Просмотров: 3 258  Рубрика: Защита растений

Метки: клещ, метод борьбы, черная смородина

Зажигание: Использование паяльной лампы - Использование паяльной лампы

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

  1. Выверните винты регулятора ацетилена, чтобы пропустить газ, и отрегулируйте рабочее давление газа.
  2. Откройте баллон с ацетиленом медленно, но только на треть или половину оборота. Это позволяет выделять ацетилен.
  3. Откройте ацетиленовый игольчатый клапан на головке резака и настройте регулятор ацетилена на оптимальное рабочее давление (около 5 фунтов на кв. Дюйм).
  4. Закройте ацетиленовый игольчатый клапан. Это останавливает поток ацетилена, так что вы можете безопасно запустить кислород.
  5. Выверните винты регулятора кислорода, чтобы кислород мог поступать, и вы могли отрегулировать рабочее давление.
  6. Медленно откройте вентиль кислородного баллона до полного открытия.Это позволяет выделять кислород.
  7. Откройте кислородный игольчатый клапан на головке резака. На этом этапе вы можете настроить кислородный регулятор для достижения оптимального рабочего давления (около 5 фунтов на кв. Дюйм для сварочных целей).
  8. Закройте кислородный игольчатый клапан, чтобы остановить поток кислорода и впоследствии безопасно зажечь газ.
  9. Приостановите и проверьте герметичность любого из клапанов и шлангов.
  10. Снова откройте игольчатый клапан ацетилена, чтобы вышел газ и он загорелся.
  11. Если паяльная лампа не оборудована внутренним устройством искрового зажигания, зажгите ацетилен с помощью фрикционной зажигалки, удерживаемой на расстоянии примерно одного дюйма от наконечника.
  12. Подождите, пока черный дым не прекратится, и медленно откройте кислородный игольчатый клапан. Регулировка кислородного игольчатого клапана влияет на тип получаемого пламени. Обычно предпочтительным является нейтральное пламя, состоящее из равных частей ацетилена и кислорода.

Но чтобы выключить фонарик, выполните следующие действия:

Объявление

  1. Чтобы выключить горелку, сначала закройте ацетиленовый игольчатый клапан, который погасит пламя.
  2. Закройте кислородный игольчатый клапан. Это перекрывает поток кислорода.
  3. Выключите вентиль баллона с ацетиленом, а затем закройте клапан кислородного баллона. Это останавливает выпуск газов из их баллонов.
  4. Откройте игольчатый клапан ацетилена, пока манометры не покажут нулевое давление, и отверните винты регулировки давления на регуляторе ацетилена. Закройте ацетиленовый игольчатый клапан. Это стравит давление ацетилена в шлангах и горелке.
  5. Откройте кислородный игольчатый клапан, пока манометры не покажут нулевое давление, и выверните винты регулировки давления на кислородном регуляторе.Закройте кислородный игольчатый клапан. При этом в шлангах и горелке снижается давление кислорода.

[Источник: Университет штата Орегон]

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

.

Как пользоваться паяльной лампой

Паяльные лампы традиционно используются для карамелизации сахара поверх крем-брюле, но их можно использовать и для других целей. Они великолепны для легкого поджаривания безе, как в «Запеченной Аляске» Тома Эйкенса или в малиновых пирогах с безе Пола Эйнсворта. Контролируемый нагрев паяльной лампы делает ее идеальной для извлечения охлажденных десертов, таких как желе, чизкейк или мороженое; также полезно разогреть ножи, чтобы аккуратно разрезать замороженные продукты.

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

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

.

Использование паяльной лампы в домашних условиях

Краткое примечание по безопасности

Паяльные лампы

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

Ослабьте ржавые гайки и болты

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

Пайка медных труб

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

Пайка металлов вместе

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

Гибочная сталь

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

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

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

Удаление этикеток со стеклянных бутылок

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

Развести мангал, костер или костровище

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

Пирография

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

Пистолет для быстрого нанесения горячего клея

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

.

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

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

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

Обновление (8 октября 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's Linear Regression , чтобы соответствовать модели и сравнить коэффициенты.

 # 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, если GPU недоступен? ”, вы можете быть удивлены… 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) tensor ([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: листовая переменная, для которой требуется grad, была использована в операции на месте.

Почему ?! Оказывается, случай «слишком много хорошего» . Виной всему является способность 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 .

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

  • __init __ (self) : он определяет части, составляющие модель - в нашем случае два параметра : , a и б .

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

  • вперед (self, x) : выполняет фактических вычислений , то есть выводит прогноз с учетом входных x
.

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