Just Python
10.3K subscribers
4.33K photos
11 videos
4.31K links
🐍Простое изучение Python.

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

Канал на бирже: telega.in/c/justpython_it

РКН: clck.ru/3MnbSc
Download Telegram
Что такое список в Python?

Список в Python — это встроенный тип данных, который позволяет нам хранить множество различных значений, таких как числа, строки, объекты datetime и так далее.

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

#theory // Just Python
Как определить индекс элемента списка в Python

Итак, как же определить индекс элемента в Python? Давайте представим, что у нас есть элемент списка и нам нужно узнать индекс или позицию этого элемента.

Списки Python предоставляют нам метод index(), с помощью которого можно получить индекс первого вхождения элемента в список.

#theory // Just Python
Как найти индексы всех вхождений элемента в списке

А что, если искомое значение встречается в списке несколько раз и мы хотим узнать индексы всех этих элементов? Метод index() выдаст нам индекс только первого вхождения.

В этом фрагменте кода мы перебираем индексы списка в цикле for и при помощи range(). Далее мы проверяем значение элемента под каждым индексом на равенство «Math«. Если значение элемента — «Math«, мы сохраняем значение индекса в списке.

#theory // Just Python
Как искать индекс элемента, которого, возможно, нет в списке

Бывает, нужно получить индекс элемента, но мы не уверены, есть ли он в списке.

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

#theory // Just Python
Как определить локальную переменную в Python

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

#theory // Just Python
Как определить глобальную переменную в Python

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

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

#theory // Just Python
Как использовать ключевое слово global в Python

По умолчанию Python думает, что внутри функции вы хотите использовать локальную переменную.

И когда мы сначала пытаемся вывести значение переменной, а затем повторно присваиваем значение переменной, к которой мы пытаемся получить доступ, Python запутывается.

#theory // Just Python
Как удалить ключ из словаря при помощи генератора

Генераторы словаря в Python — это быстрые однострочники, которые позволяют легко создавать словари.

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

#theory // Just Python
Что такое строка?

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

#theory // Just Python
Что следует учитывать при использовании метода lower()

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

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

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

#theory // Just Python
Метод lower() возвращает новую строку

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

#theory // Just Python
Пример работы метода lower(): проверяем пользовательский ввод

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

#theory // Just Python
Почему так происходит?

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

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

#theory // Just Python
Модули Dataset и DataLoader

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

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

#theory // Just Python
Результат обратного распространения и обучения

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

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

#theory // Just Python
Определение метода тестирования

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

#theory // Just Python
Обучение модели

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

#theory // Just Python
Сохранение и загрузка модели

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

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

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

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

#theory // Just Python
Альтернативный способ создания namedtuple

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

Доступ к элементам в namedtuple возможен как по индексу, так и по идентификатору.

#theory // Just Python
Зачем использовать namedtuple вместо обычного словаря

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

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

Выполняя приведенный выше код, вы обнаружите, что namedtuple имеет размер 64 байта, тогда как словарь занимает гораздо больше — 240 байт. Это почти в 4 раза больше памяти.

#theory // Just Python
UserList

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

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

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

#theory // Just Python