Python School
82.2K subscribers
2.42K photos
8 videos
577 links
Уроки по Python, которые упростят вам жизнь. Без идиотских туториалов.

Наши мемы для программистов: @conhum

Сотрудничество - @alivian

Канал сотрудничает с рекламным сервисом @Tgpodbor_official

РКН: clck.ru/3G6pBb
加入频道
Что такое строка?

Строка — это тип данных в Python. Строка записывается как последовательность символов, заключенная в одинарные или двойные кавычки.
Что следует учитывать при использовании метода lower()

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

Строки неизменяемы

Строки являются неизменяемым типом данных. Это означает, что их нельзя поменять после создания, только перезаписать заново. Поэтому исходная строка после использования метода lower() остается неизменной.
Метод lower() возвращает новую строку

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

Скрипт задает пользователю вопрос "What color is the sun?" («Какого цвета солнце?») и ждет от него ответа. Затем программа проверяет, совпадает ли ответ с "yellow" (желтый), и если да, то печатает "Correct!" («Правильно!»). Если пользователь введет другой ответ, программа напечатает "That is not the correct color!" («Это неправильный цвет!»).
Почему так происходит?

Программа проверяет, совпадает ли пользовательский ответ со строкой yellow. Однако — Yellow с заглавной буквой Y — это совершенно другая строка.

Вы можете легко исправить это, используя метод lower() и внеся небольшое изменение в программу.
Модули Dataset и DataLoader

Как и Tensorflow, PyTorch имеет несколько наборов данных, включенных в пакет (например, Text, Image и Audio). В этом руководстве будет использоваться один из таких встроенных наборов данных изображений — CIFAR10.

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

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

Метод loss.backward() использует потери для вычисления градиента, затем мы используем Optimizer.step() для обновления весов.
Определение метода тестирования

Это нужно для того, чтобы мы могли оценивать нашу модель и выводить точность на тестовом наборе. Большие отличия от метода тестирования заключаются в том, что мы используем model.eval(), чтобы перевести модель в режим тестирования, и torch.no_grad(), который отключит вычисление градиента, так как мы не используем обратное распространение во время тестирования. Наконец, мы вычисляем средние потери для набора тестов и общую точность.
Первая карта с кэшбеком в 42% на покупки у партнеров и до 3% на все покупки — такие условия предлагает дебетовая карта Уралсиб.

· Перестаньте терять деньги: получайте 11% на остаток в первые 2 месяца и бесплатное обслуживание!
· Не теряйте на комиссиях при переводах — до 100.000р без комиссии
· Получение карты — в день обращения

Не ленитесь, оформляйте новую карту и получайте прибыль: https://go.redav.online/06e1242ecffd1910
Обучение модели

Укажите количество epochs, на которых вы хотите обучить модель. Каждая эпоха будет проходить цикл train, который выводит прогресс каждые 2000 выборок. Затем он проверяет модель на тестовом наборе и выводит точность и потери на тестовом наборе.
Сохранение и загрузка модели

Передайте model.state_dict() в качестве первого аргумента. Это просто словарь, который сопоставляет слои с их соответствующими изученными параметрами (весами и смещениями).

В качестве второго аргумента дайте имя вашей модели (принято сохранять модели PyTorch с использованием расширений .pth или .pt). Также можно указать полный путь, если вы хотите сохранить его в определенном каталоге.

torch.save(model.state_dict(), "cifar_fc.pth")

Если вы хотите загрузить свою модель для логического вывода, используйте torch.load(), чтобы получить сохраненную модель, и сопоставьте изученные параметры с помощью load_state_dict.
Расширьте свои знания в программировании на Python, уделив этому всего 3 вечера по 1,5 часа!

На бесплатном онлайн-интенсиве Skillbox по программированию вы попробуете себя в роли разработчика на Python и узнаете, как работают популярные алгоритмы этого языка. Проанализируете данные с помощью Data Science. Получите базовые навыки по разным направлениям и советы по развитию карьеры. Мощный компьютер не нужен.

Подробная программа: https://clc.to/TIR9KA

🎁 Всех участников ждут подарки.

Выберите свой путь в мире IT с 3 по 5 ноября в 19:00 по московскому времени!
Альтернативный способ создания namedtuple

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

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

Основным преимуществом namedtuple является то, что он занимает меньше места (памяти), чем аналогичный словарь.

Поэтому, в случае больших данных именованные кортежи эффективны.

Выполняя приведенный выше код, вы обнаружите, что namedtuple имеет размер 64 байта, тогда как словарь занимает гораздо больше — 240 байт. Это почти в 4 раза больше памяти.
​​7–9 ноября в 21:00 по московскому времени пройдёт бесплатный онлайн-интенсив по работе с Python. Всего за 3 дня вы познакомитесь с основами универсального языка и технологиями искусственного интеллекта. А ещё с помощью BotFather создадите свой первый полноценный проект — Telegram-бота.

Запишитесь и получите статью «Экспекто Питонум: 10 заклинаний на змеином языке» с полезными скриптами на Python: ▶️https://clc.to/Q-YeKg
👉 На интенсиве вы изучите структуру данных Python, Machine Learning и сможете сразу применить теорию на практике. Создадите чат-бота, научите его говорить и подключите к Telegram.

☝️ Спикер интенсива — Михаил Овчинников, главный методист технического направления Skillbox. Директор по разработке в лондонской компании Noon Academy. Руководил разработкой бизнес-приложений в известной американской социальной сети.

⭐️ Всем участникам подарим электронную книгу Пола Доэрти и Джеймса Уилсона «Человек + машина» издательства МИФ. Подключайтесь к прямым эфирам и используйте возможность получить сертификат на 10 000 рублей на любой курс Skillbox.
UserList

UserList — это похожий на список контейнерный тип данных, который является классом-оболочкой для списков.

Синтаксис будет следующим: collections.UserList([list]).

Вы передаете обычный список в качестве аргумента userlist. Этот список хранится в атрибуте ‘data’ и доступен через метод UserList.data.
UserString

Подобно тому, как UserLists является классом-оболочкой для списков, UserString является классом-оболочкой для строк.

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

Как видите, число 765 было преобразовано в строку «765», и доступ к ней можно получить с помощью метода UserString.data.
Как и когда можно использовать UserString

UserString можно использовать для изменения строк или выполнения определенных функций.

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

Давайте посмотрим на пример того, как UserString можно использовать для удаления определенных слов из строки.
UserDict

Это класс-оболочка для словарей. Его синтаксис аналогичен UserList и UserString.

Мы передаем словарь в качестве аргумента, который хранится в атрибуте ‘data’.
Pyperclip

Этот модуль был создан для межплатформенного копирования в Python. В Pyperclip есть функции copy() и paste(), которые могут отправлять текст в буфер обмена и получать текст из него.

Отправка вывода вашей программы в буфер обмена облегчает его вставку в email, текстовый редактор или другую программу.
Defaultdict

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

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