Программирование нейросетей: обучение с Python-репетитором
Программирование нейросетей обучение начинается с Python. Неделя занятий с нейросетью-репетитором в LibraChat: циклы, три задачи без готовых решений и мои ошибки.
А
Андрей
Преподаватель, научный редактор LibraChat
7 мин чтения
Хочешь научиться программировать нейросети, но не знаешь, с какой стороны подойти? Я задавал себе тот же вопрос весной. Ответ оказался скучнее, чем хотелось: сначала Python, его основы, и только потом всё остальное. Запрос «программирование нейросетей обучение» обычно ведёт к длинным курсам. Я пошёл другим путём и неделю занимался с нейросетью как с репетитором, по полчаса в день. Ниже эта неделя по дням: какой запрос я отправил в LibraChat, что получил, где ошибся и какие правила вывел для такого обучения.
Программирование нейросетей: обучение начинается не с нейросетей
Я научный редактор. Последние годы мне всё чаще приходят статьи, где авторы обучают модели, и мне хотелось понимать код в приложениях хотя бы на уровне «что здесь происходит». Программировать я не умел совсем.
Почти любой разговор о программировании нейросетей упирается в Python. На нём пишут большую часть такого кода. Поэтому план был простой: сначала основы языка, а нейросети потом.
Сначала я попробовал выбрать курс по запросу «программирование нейросетей обучение» и утонул в программах на полгода. Потом решил иначе. Мне нужен был не набор лекций, а человек, который объяснит непонятное и проверит, что я понял. Такого человека у меня не было. Была нейросеть.
Понедельник: зачем вообще нужны циклы
Неделю назад я установил Python и выучил, как печатать текст и складывать числа. Следующая тема в любом учебнике — циклы. Я отправил в LibraChat такой запрос:
Я учу Python с нуля, неделю назад установил его. Объясни мне циклы for и while так, как объяснял бы преподаватель: сначала зачем они нужны, потом пример из жизни, потом код. Дай три задачи по возрастанию сложности, решения не показывай — я пришлю свои, а ты проверишь.
Как преподаватель я оценил порядок ответа. Сначала смысл:
Циклы нужны, чтобы не копировать один и тот же код десятки раз.
Потом пример из жизни, и пример мне понравился профессионально. Учитель проверяет тетради: если их ровно 10 и каждую нужно открыть по очереди, это `for`, число повторений известно заранее. Если он мешает суп и останавливается, только когда закипит, это `while`: стоп задаёт условие, а не счётчик.
Я двадцать лет объясняю студентам абстрактные вещи через бытовые и знаю, как трудно подобрать пример, где разница видна сразу. Тетради и суп видны сразу.
Дальше шёл код, по три-четыре строки на каждый вид цикла, и короткое правило выбора. Я свёл его в таблицу для себя:
· `for` · `while`
Когда брать — знаешь, сколько раз или по чему идти — стоп зависит от условия
Пример из жизни — проверить 10 тетрадей — мешать суп, пока не закипит
Чего не забыть — правая граница `range` не входит — менять условие внутри цикла
Вторник: первая задача и первая ошибка
Задачи пришли без решений, как я и просил. Первая: вывести числа от 1 до 20 включительно, только через `for`.
Я написал `range(1, 20)` и запустил. Программа напечатала числа до 19. Двадцатки не было. Минуту я смотрел на экран, потом вспомнил строку из объяснения: «Правая граница не входит». Она была написана прямо под примером, а я её проскочил.
Исправил на `range(1, 21)`. Заработало.
Эту ошибку делает, кажется, каждый новичок. Но запомнил я её именно потому, что нашёл сам. Если бы мне сразу показали правильное решение, я бы кивнул и через день написал `range(1, 20)` снова. Это я знаю по студентам: готовый ответ проходит мимо головы.
В тетради появилась первая строка: «range(1, 20) — до 19. Правая граница не входит». Пишу коротко, своими словами, без копирования из объяснения. Через неделю таких строк было семь. Половина из них про одно и то же: я невнимательно читаю условие задачи. Это неприятное открытие для редактора, который всю жизнь ловит невнимательность у других.
Ещё одна вещь, которую я заметил во вторник. Мне хотелось сразу спросить и про функции, и про списки. Я удержался. Одна тема за занятие — правило, которое я двадцать лет повторяю студентам и которое сам нарушаю чаще всех.
Среда: задача с `while`, где я застрял
Вторая задача сложнее. Пользователь вводит числа по одному, программа складывает их, пока не введут ноль, потом выводит сумму. Ноль в сумму не входит.
Здесь я застрял по-настоящему. Мой первый вариант складывал ноль в сумму. Второй не останавливался вообще: я забыл менять условие внутри цикла. В объяснении про это было предупреждение: «Условие нужно менять внутри цикла, иначе он не остановится». Я столкнулся с этим на практике и проверил на себе и понял, что значит «не остановится». Программа просто ждёт следующего числа, бесконечно.
Решение я в итоге собрал за 40 минут. И отправил его в тот же чат с просьбой проверить, не исправляя за меня, а указав, где слабое место. Это важная оговорка: если просить «проверь», легко получить сразу исправленный код. Мне нужно было понять, а не получить.
Четверг: третья задача и правила для себя
Третья задача: найти все числа от 1 до 100, которые делятся и на 3, и на 5, вывести их в строку и посчитать, сколько их. Тут я уже не застревал. Заметил, что делаю её быстрее, чем вторую, хотя она сложнее.
После третьей задачи я сделал то, что прошу делать студентов. Закрыл код и объяснил решение вслух, своими словами, как будто рассказываю коллеге. «Иду по числам от 1 до 100. Для каждого проверяю остаток от деления на 3 и на 5. Если оба нулевые, печатаю число и прибавляю единицу к счётчику». Там, где объяснение спотыкается, обычно и сидит непонимание. У меня споткнулось на слове «остаток»: я написал правильный код, но не мог объяснить, почему знак процента даёт именно остаток. Пришлось переспросить в том же чате. В следующий раз слово «остаток» меня уже не остановило.
К четвергу у меня сложились правила, по которым я теперь учусь с нейросетью:
В запросе прошу сначала смысл, потом пример из жизни, потом код. Порядок важен.
Всегда пишу «решения не показывай». Без этого ответ придёт целиком.
Решаю сам, даже если долго. 40 минут на задачу — нормально.
Отправляю своё решение в тот же чат и прошу указать слабое место, а не переписать код.
Ошибку, которую нашёл сам, записываю в тетрадь одной строкой.
Пятый пункт я взял у своих же студентов. Лучшие из них ведут список своих ошибок. Через месяц такой список полезнее любого учебника.
Пятница: программирование нейросетей и обучение, что изменилось за неделю
5 занятий по 30 минут. Циклы я теперь понимаю: не на уровне «прочитал», а на уровне «написал, сломал, починил». В статьях, которые я редактирую, циклы встречаются постоянно, обычно там, где модель много раз проходит по данным при обучении. Раньше я пропускал этот код глазами. Теперь читаю.
Тем, кто ищет «программирование нейросетей обучение», я бы честно сказал: первые недели будут про такие вот циклы, и это нормально. Что я понял о таком обучении:
нейросеть-репетитор хороша для объяснений: можно переспросить десять раз, и никто не устанет;
она не заменяет практику: код всё равно надо писать руками;
самое полезное в ответе — не код, а одна строка предупреждения, которую легко проскочить.
Чего нейросеть не сделает: не заставит тебя заниматься. Полчаса в день — твоя часть работы. Второе: до настоящего программирования нейросетей путь неблизкий. Циклы — это первая ступенька, впереди функции, библиотеки, работа с данными. Но каждая следующая ступенька учится так же: объяснение, задача, своя ошибка.
Если ты уже пишешь код и хочешь понять, как нейросеть помогает в работе программиста, а не в учёбе, загляни в статью нейросеть для программиста.
Попробуй на своей теме
Вот маленькое задание. Возьми тему, на которой ты сейчас застрял: циклы, списки, функции, что угодно. Сформулируй тот же запрос про свою тему, например про списки или функции, и отправь его в чат LibraChat. Готовых решений не проси. Реши первую задачу сам и найди свою первую ошибку.
Заниматься можно на бесплатном тарифе. Если учёба затянется и захочется больше возможностей, посмотри, что дают тарифы LibraChat.
программирование нейросетей обучениеpython с нуляциклынейросеть-репетиторсамообучениеучёба