Сохранение и загрузка модели
Передайте model.state_dict() в качестве первого аргумента. Это просто словарь, который сопоставляет слои с их соответствующими изученными параметрами (весами и смещениями).
В качестве второго аргумента дайте имя вашей модели (принято сохранять модели PyTorch с использованием расширений .pth или .pt). Также можно указать полный путь, если вы хотите сохранить его в определенном каталоге.
torch.save(model.state_dict(), "cifar_fc.pth")
Если вы хотите загрузить свою модель для логического вывода, используйте torch.load(), чтобы получить сохраненную модель, и сопоставьте изученные параметры с помощью load_state_dict.
Подписывайтесь на канал 👉@pythonofff
Передайте model.state_dict() в качестве первого аргумента. Это просто словарь, который сопоставляет слои с их соответствующими изученными параметрами (весами и смещениями).
В качестве второго аргумента дайте имя вашей модели (принято сохранять модели PyTorch с использованием расширений .pth или .pt). Также можно указать полный путь, если вы хотите сохранить его в определенном каталоге.
torch.save(model.state_dict(), "cifar_fc.pth")
Если вы хотите загрузить свою модель для логического вывода, используйте torch.load(), чтобы получить сохраненную модель, и сопоставьте изученные параметры с помощью load_state_dict.
Подписывайтесь на канал 👉@pythonofff
🔥1
Работа с датасетами
Datasets — легкая и расширяемая библиотека для обмена и доступа к наборам данных (они же датасеты).
Наборы данных также предоставляют доступ к оценочным метрикам, предназначенных для того, что бы сообщество могло делиться новыми наборами данных.
Из плюсов библиотеки можно выделить следующее:
— Кэширование данных;
— Совместимость с NumPy, pandas, PyTorch, TenserFlow 2 и JAX;
— Все наборы данных отображаются в памяти.
Основные методы, которые понадобятся в работе с датасетами:
list_dataset() — показывает доступные датасеты;
load_dataset() — создает экземпляр датасета;
list_metrics() — показывает доступные метрики;
load_metric() — создает экземпляр метрики.
Много всего полезного об этой библиотеке вы можете найти в документации.
Подписывайтесь на канал 👉@pythonofff
Datasets — легкая и расширяемая библиотека для обмена и доступа к наборам данных (они же датасеты).
Наборы данных также предоставляют доступ к оценочным метрикам, предназначенных для того, что бы сообщество могло делиться новыми наборами данных.
Из плюсов библиотеки можно выделить следующее:
— Кэширование данных;
— Совместимость с NumPy, pandas, PyTorch, TenserFlow 2 и JAX;
— Все наборы данных отображаются в памяти.
Основные методы, которые понадобятся в работе с датасетами:
list_dataset() — показывает доступные датасеты;
load_dataset() — создает экземпляр датасета;
list_metrics() — показывает доступные метрики;
load_metric() — создает экземпляр метрики.
Много всего полезного об этой библиотеке вы можете найти в документации.
Подписывайтесь на канал 👉@pythonofff
🔥3👍2
Альтернативный способ создания namedtuple
В качестве альтернативы вы можете передать список, состоящий из имен полей, вместо просто имен полей, разделенных пробелом.
Доступ к элементам в namedtuple возможен как по индексу, так и по идентификатору.
Подписывайтесь на канал 👉@pythonofff
В качестве альтернативы вы можете передать список, состоящий из имен полей, вместо просто имен полей, разделенных пробелом.
Доступ к элементам в namedtuple возможен как по индексу, так и по идентификатору.
Подписывайтесь на канал 👉@pythonofff
🔥2
Чтение аудио-файлов в массив numpy
Одним из основных действий в начале аудиоанализа конечно же является чтение аудио-файла и выгрузка его звукового временного ряда в виде массива numpy. Для этих целей хорошо подходит модуль scipy.io.wavfile, входящий в состав библиотеки scipy и предоставляющий функции для чтения и записи wav файлов.
Для чтения используем функцию read, которая возвращает частоту дискретизации и массив numpy со значениями звукового давления для каждого кадра. Т.к. файлы формата wav могут состоять из одного(моно) либо из двух(стерео) каналов, то и массив numpy будет, соответственно, являться одномерным либо двумерным (по подмассиву на каждый канал).
В качестве примера также добавили построение в matplotlib графика сигнала по полученным значениям.
Подписывайтесь на канал 👉@pythonofff
Одним из основных действий в начале аудиоанализа конечно же является чтение аудио-файла и выгрузка его звукового временного ряда в виде массива numpy. Для этих целей хорошо подходит модуль scipy.io.wavfile, входящий в состав библиотеки scipy и предоставляющий функции для чтения и записи wav файлов.
Для чтения используем функцию read, которая возвращает частоту дискретизации и массив numpy со значениями звукового давления для каждого кадра. Т.к. файлы формата wav могут состоять из одного(моно) либо из двух(стерео) каналов, то и массив numpy будет, соответственно, являться одномерным либо двумерным (по подмассиву на каждый канал).
В качестве примера также добавили построение в matplotlib графика сигнала по полученным значениям.
Подписывайтесь на канал 👉@pythonofff
❤1🔥1
Зачем использовать namedtuple вместо обычного словаря
Основным преимуществом namedtuple является то, что он занимает меньше места (памяти), чем аналогичный словарь.
Поэтому, в случае больших данных именованные кортежи эффективны.
Выполняя приведенный выше код, вы обнаружите, что namedtuple имеет размер 64 байта, тогда как словарь занимает гораздо больше — 240 байт. Это почти в 4 раза больше памяти.
Подписывайтесь на канал 👉@pythonofff
Основным преимуществом namedtuple является то, что он занимает меньше места (памяти), чем аналогичный словарь.
Поэтому, в случае больших данных именованные кортежи эффективны.
Выполняя приведенный выше код, вы обнаружите, что namedtuple имеет размер 64 байта, тогда как словарь занимает гораздо больше — 240 байт. Это почти в 4 раза больше памяти.
Подписывайтесь на канал 👉@pythonofff
🔥1
Углубляемся в Итератор
Итератор нужен для доступа к объектам без раскрытия внутреннего предоставления.
Существует два вида итераторов: внешний,внутренний.
Внешний итератор — когда процессом обхода управляет клиент, с помощью магического метода __next__.
Внутренний итератор — принимает callback функции и уведомляет клиента о получение следующего элемента.
Сам итератор это объект, который возвращает свои элементы по одному разу. В Python это любой объект у которого есть магический метод __next__. Метод возвращает следующий элемент, если он существует, в другом случаи вернет StopIteration.
Так-же у каждого итератора должна быть метод __iter__, он возвращает сам итератор.
Интерфейса итератора состоит из first,next,current.
first — возвращает итератор к началу агрегата,что-то вроде reset.
next — переходит на следующий элемент агрегата, в случаи если нет следующего элемента, то будет StopIteration.
current — возвращает текущий элемент.
Подписывайтесь на канал 👉@pythonofff
Итератор нужен для доступа к объектам без раскрытия внутреннего предоставления.
Существует два вида итераторов: внешний,внутренний.
Внешний итератор — когда процессом обхода управляет клиент, с помощью магического метода __next__.
Внутренний итератор — принимает callback функции и уведомляет клиента о получение следующего элемента.
Сам итератор это объект, который возвращает свои элементы по одному разу. В Python это любой объект у которого есть магический метод __next__. Метод возвращает следующий элемент, если он существует, в другом случаи вернет StopIteration.
Так-же у каждого итератора должна быть метод __iter__, он возвращает сам итератор.
Интерфейса итератора состоит из first,next,current.
first — возвращает итератор к началу агрегата,что-то вроде reset.
next — переходит на следующий элемент агрегата, в случаи если нет следующего элемента, то будет StopIteration.
current — возвращает текущий элемент.
Подписывайтесь на канал 👉@pythonofff
🔥2👍1
UserList
UserList — это похожий на список контейнерный тип данных, который является классом-оболочкой для списков.
Синтаксис будет следующим: collections.UserList([list]).
Вы передаете обычный список в качестве аргумента userlist. Этот список хранится в атрибуте ‘data’ и доступен через метод UserList.data.
Подписывайтесь на канал 👉@pythonofff
UserList — это похожий на список контейнерный тип данных, который является классом-оболочкой для списков.
Синтаксис будет следующим: collections.UserList([list]).
Вы передаете обычный список в качестве аргумента userlist. Этот список хранится в атрибуте ‘data’ и доступен через метод UserList.data.
Подписывайтесь на канал 👉@pythonofff
🔥2
OpenCV и веб-камера
Для работы с компьютерным зрением и картинками/видео существует библиотека OpenCV.
Устанавливается она через PIP:
pip install opencv-python.
Для простой демонстрации попробуем получить картинку с веб-камеры и вывести видео в графическое окно.
Команда cap = cv2.VideoCapture(0) инициализирует веб-камеру (цифра указывает её индекс).
Строчка ret, frame = cap.read() вытягивает из веб-камеры картинку в переменную frame и статус получения картинки в ret. Если ret == True, значит все прошло успешно.
Команда cv2.imshow('webcam', frame) создаст графическое окно с картинкой и покажет его.
Чтобы прервать работу скрипта используется проверка на нажатие определенной клавиши на клавиатуре:
if cv2.waitKey(1) & 0xFF == ord('q'):
Метод cap.release() освобождает веб-камеру из скрипта примера и позволяет ее использовать в других программах, а cv2.destroyAllWindows() уничтожит графические окна, созданные библиотекой openCV.
Подписывайтесь на канал 👉@pythonofff
Для работы с компьютерным зрением и картинками/видео существует библиотека OpenCV.
Устанавливается она через PIP:
pip install opencv-python.
Для простой демонстрации попробуем получить картинку с веб-камеры и вывести видео в графическое окно.
Команда cap = cv2.VideoCapture(0) инициализирует веб-камеру (цифра указывает её индекс).
Строчка ret, frame = cap.read() вытягивает из веб-камеры картинку в переменную frame и статус получения картинки в ret. Если ret == True, значит все прошло успешно.
Команда cv2.imshow('webcam', frame) создаст графическое окно с картинкой и покажет его.
Чтобы прервать работу скрипта используется проверка на нажатие определенной клавиши на клавиатуре:
if cv2.waitKey(1) & 0xFF == ord('q'):
Метод cap.release() освобождает веб-камеру из скрипта примера и позволяет ее использовать в других программах, а cv2.destroyAllWindows() уничтожит графические окна, созданные библиотекой openCV.
Подписывайтесь на канал 👉@pythonofff
👍6🔥1
UserString
Подобно тому, как UserLists является классом-оболочкой для списков, UserString является классом-оболочкой для строк.
UserString позволяет добавлять к строке определенное поведение. Вы можете передать этому классу любой конвертируемый в строку аргумент и затем получить доступ к этой строке, используя атрибут data
Как видите, число 765 было преобразовано в строку «765», и доступ к ней можно получить с помощью метода UserString.data.
Подписывайтесь на канал 👉@pythonofff
Подобно тому, как UserLists является классом-оболочкой для списков, UserString является классом-оболочкой для строк.
UserString позволяет добавлять к строке определенное поведение. Вы можете передать этому классу любой конвертируемый в строку аргумент и затем получить доступ к этой строке, используя атрибут data
Как видите, число 765 было преобразовано в строку «765», и доступ к ней можно получить с помощью метода UserString.data.
Подписывайтесь на канал 👉@pythonofff
👍2🔥1
Конвертируем файлы в аудио-формате
В Python мы можем решить задачу конвертации из одного аудио-формата в другой как всегда множеством способов. Наиболее приятным решением, как по мне, является использование модуля pydub, который представляет собой интерфейс-надстройку над ffmpeg.
pydub позволяет загружать, редактировать и сохранять аудио-файлы в любом формате, поддерживаемом ffmpeg.
Для загрузки файла нам нужно выбрать функцию from_ c соответствующим форматом в названии из класса AudioSegment. Также можно воспользоваться наиболее общей функцией from_file, передав путь к файлу и его формат.
Для экспорта файла с нужным форматом, в который мы хотели его сконвертировать, используем функцию export у полученного после загрузки файла объекта класса AudioSegment.
Подписывайтесь на канал 👉@pythonofff
В Python мы можем решить задачу конвертации из одного аудио-формата в другой как всегда множеством способов. Наиболее приятным решением, как по мне, является использование модуля pydub, который представляет собой интерфейс-надстройку над ffmpeg.
pydub позволяет загружать, редактировать и сохранять аудио-файлы в любом формате, поддерживаемом ffmpeg.
Для загрузки файла нам нужно выбрать функцию from_ c соответствующим форматом в названии из класса AudioSegment. Также можно воспользоваться наиболее общей функцией from_file, передав путь к файлу и его формат.
Для экспорта файла с нужным форматом, в который мы хотели его сконвертировать, используем функцию export у полученного после загрузки файла объекта класса AudioSegment.
Подписывайтесь на канал 👉@pythonofff
👍2🔥1
Как и когда можно использовать UserString
UserString можно использовать для изменения строк или выполнения определенных функций.
Предположим, вы хотите удалить определенное слово из текстового файла (где бы оно ни было). Возможно, некоторые слова в тексте неуместны.
Давайте посмотрим на пример того, как UserString можно использовать для удаления определенных слов из строки.
Подписывайтесь на канал 👉@pythonofff
UserString можно использовать для изменения строк или выполнения определенных функций.
Предположим, вы хотите удалить определенное слово из текстового файла (где бы оно ни было). Возможно, некоторые слова в тексте неуместны.
Давайте посмотрим на пример того, как UserString можно использовать для удаления определенных слов из строки.
Подписывайтесь на канал 👉@pythonofff
🔥2
Визуализация данных на карте с Folium
Folium позволяет как и привязать данные к карте для визуализации фоновых картограмм, так и передавать векторные, растовые, HTML визуализации в качестве маркеров на карте.
Библиотека поддерживает настраиваемые наборы фрагментов MapBox или Cloudmade.
Есть разные виды маркеров начиная с простого маркера местоположения в стиле листовки с всплывающим окном и всплывающей подсказкой HTML.
Вы так-же можете налаживать изображения, видео, GeoJSON и TopoJSON.
Подписывайтесь на канал 👉@pythonofff
Folium позволяет как и привязать данные к карте для визуализации фоновых картограмм, так и передавать векторные, растовые, HTML визуализации в качестве маркеров на карте.
Библиотека поддерживает настраиваемые наборы фрагментов MapBox или Cloudmade.
Есть разные виды маркеров начиная с простого маркера местоположения в стиле листовки с всплывающим окном и всплывающей подсказкой HTML.
Вы так-же можете налаживать изображения, видео, GeoJSON и TopoJSON.
Подписывайтесь на канал 👉@pythonofff
❤2
UserDict
Это класс-оболочка для словарей. Его синтаксис аналогичен UserList и UserString.
Мы передаем словарь в качестве аргумента, который хранится в атрибуте ‘data’.
Подписывайтесь на канал 👉@pythonofff
Это класс-оболочка для словарей. Его синтаксис аналогичен UserList и UserString.
Мы передаем словарь в качестве аргумента, который хранится в атрибуте ‘data’.
Подписывайтесь на канал 👉@pythonofff
🔥2
Работа с датой и временем
Dateutil – предоставляет расширения для методов, уже имеющихся в datetime, имеет возможности для обработки сырых данных.
Dateutil разбит на несколько подклассов:
easter — используется для вычисления даты и времени с учетом разных календарей, а именно: западный,православный,юлианский.
parser — включает в себя продвинутый парсер даты и времени, с помощью которого мы можем парсить разные форматы.
relativedata — предназначен для замены компонентов даты.
Так-же следуют упомянуть utils , он содержит основные функции для работы с датой и временем.
Подписывайтесь на канал 👉@pythonofff
Dateutil – предоставляет расширения для методов, уже имеющихся в datetime, имеет возможности для обработки сырых данных.
Dateutil разбит на несколько подклассов:
easter — используется для вычисления даты и времени с учетом разных календарей, а именно: западный,православный,юлианский.
parser — включает в себя продвинутый парсер даты и времени, с помощью которого мы можем парсить разные форматы.
relativedata — предназначен для замены компонентов даты.
Так-же следуют упомянуть utils , он содержит основные функции для работы с датой и временем.
Подписывайтесь на канал 👉@pythonofff
🔥2
Pyperclip
Этот модуль был создан для межплатформенного копирования в Python. В Pyperclip есть функции copy() и paste(), которые могут отправлять текст в буфер обмена и получать текст из него.
Отправка вывода вашей программы в буфер обмена облегчает его вставку в email, текстовый редактор или другую программу.
Подписывайтесь на канал 👉@pythonofff
Этот модуль был создан для межплатформенного копирования в Python. В Pyperclip есть функции copy() и paste(), которые могут отправлять текст в буфер обмена и получать текст из него.
Отправка вывода вашей программы в буфер обмена облегчает его вставку в email, текстовый редактор или другую программу.
Подписывайтесь на канал 👉@pythonofff
👍2
Получение аудиопотока с микрофона
Библиотека PyAudio предоставляет возможности для записи аудиопотока с различных устройств.
PyAudio работает посредством кросс-платформенной библиотеки PortAudio (поэтому необходимо заранее установить пакет разработки portaudio19-dev).
В приведенном примере мы создаем объект класса PyAudio и открываем поток с рядом констант для настройки аудиопотока, поступающего с микрофона (для выбора другого устройства нужно передать его номер в качестве аргумента input_device_index).
Данный объект потока позволяет считывать с устройства с помощью метода stream.read(). Полученную информацию мы можем использовать для дальнейшего анализа и модификации.
В примере же мы просто считываем 10 секунд, после чего записываем их в аудио-файл wav.
Подписывайтесь на канал 👉@pythonofff
Библиотека PyAudio предоставляет возможности для записи аудиопотока с различных устройств.
PyAudio работает посредством кросс-платформенной библиотеки PortAudio (поэтому необходимо заранее установить пакет разработки portaudio19-dev).
В приведенном примере мы создаем объект класса PyAudio и открываем поток с рядом констант для настройки аудиопотока, поступающего с микрофона (для выбора другого устройства нужно передать его номер в качестве аргумента input_device_index).
Данный объект потока позволяет считывать с устройства с помощью метода stream.read(). Полученную информацию мы можем использовать для дальнейшего анализа и модификации.
В примере же мы просто считываем 10 секунд, после чего записываем их в аудио-файл wav.
Подписывайтесь на канал 👉@pythonofff
👍1
Defaultdict
Словарь представляет из себя неупорядоченный набор ключей и значений.
В парах ключ:значение ключи должны быть уникальны и неизменяемы. Поэтому список не может быть ключом словаря, так как он изменяемый.
Подписывайтесь на канал 👉@pythonofff
Словарь представляет из себя неупорядоченный набор ключей и значений.
В парах ключ:значение ключи должны быть уникальны и неизменяемы. Поэтому список не может быть ключом словаря, так как он изменяемый.
Подписывайтесь на канал 👉@pythonofff
🔥3
Генерация шумов Перлина
Шум перлина — это математический алгоритм по генерированию процедурной текстуры (градиентного шума) псевдо-случайным методом.
Для нас он может пригодится в разных ситуациях: от симуляции временных рядов разных показателей до генерации процедурного мира как в Minecraft.
Для Python уже существует библиотека-реализация этого алгоритма, называется она perlin-noise.
pip install perlin-noise
Сначала мы создаем обьект генератора шумов, и задаем ему количество октав и seed для встроенного рандомизатора:
noise = PerlinNoise(octaves=10, seed=1)
Обьявляем размер желаемой 2d матрицы:
xpix, ypix = 100, 100
И используя списочное включение, генерируем 2d матрицу, где интенсивность значения от координат задает наш обьект генератора noise:
pic = [[noise([i/xpix, j/ypix]) for j in range(xpix)] for i in range(ypix)]
Пример картинки можно посмотреть в комментариях к этому посту.
Подписывайтесь на канал 👉@pythonofff
Шум перлина — это математический алгоритм по генерированию процедурной текстуры (градиентного шума) псевдо-случайным методом.
Для нас он может пригодится в разных ситуациях: от симуляции временных рядов разных показателей до генерации процедурного мира как в Minecraft.
Для Python уже существует библиотека-реализация этого алгоритма, называется она perlin-noise.
pip install perlin-noise
Сначала мы создаем обьект генератора шумов, и задаем ему количество октав и seed для встроенного рандомизатора:
noise = PerlinNoise(octaves=10, seed=1)
Обьявляем размер желаемой 2d матрицы:
xpix, ypix = 100, 100
И используя списочное включение, генерируем 2d матрицу, где интенсивность значения от координат задает наш обьект генератора noise:
pic = [[noise([i/xpix, j/ypix]) for j in range(xpix)] for i in range(ypix)]
Пример картинки можно посмотреть в комментариях к этому посту.
Подписывайтесь на канал 👉@pythonofff
Как найти наиболее частотные элементы с помощью счетчика
Счетчик очень полезен в реальных приложениях. Особенно, когда вам нужно обработать большие данные, и вы хотите узнать частотность некоторых элементов. Давайте рассмотрим несколько очень полезных методов, использующих counter.
Counter().most_common([n])
Подписывайтесь на канал 👉@pythonofff
Счетчик очень полезен в реальных приложениях. Особенно, когда вам нужно обработать большие данные, и вы хотите узнать частотность некоторых элементов. Давайте рассмотрим несколько очень полезных методов, использующих counter.
Counter().most_common([n])
Подписывайтесь на канал 👉@pythonofff
🔥2
Форматирование чисел в f-строках
Начиная с версии Python 3.6, стали доступны f-строки. Это удобный способ форматирования текста. Но не все знают, что он умеет вставлять float числа с настраиваемым количеством знаков после запятой.
Допустим у нас есть float число pi = 3.14159265359. Если мы его просто скорвертируем в строку, то она примет следующий вид:
>>> str(3.14159265359)
'3.14159265359'
Но что если важно выписать только до сотых долей? Делается это черех f-строку:
>>> f'Число Пи это {pi:.2f}'
'Число Пи это 3.14'
После обьявления имени переменной мы вставляем следующую комбинацию: .2f, где цифра как раз и указывает, сколько знаков после запятой нужно преобразовать в строку. Более подробно это описано в PEP 498.
Подписывайтесь на канал 👉@pythonofff
Начиная с версии Python 3.6, стали доступны f-строки. Это удобный способ форматирования текста. Но не все знают, что он умеет вставлять float числа с настраиваемым количеством знаков после запятой.
Допустим у нас есть float число pi = 3.14159265359. Если мы его просто скорвертируем в строку, то она примет следующий вид:
>>> str(3.14159265359)
'3.14159265359'
Но что если важно выписать только до сотых долей? Делается это черех f-строку:
>>> f'Число Пи это {pi:.2f}'
'Число Пи это 3.14'
После обьявления имени переменной мы вставляем следующую комбинацию: .2f, где цифра как раз и указывает, сколько знаков после запятой нужно преобразовать в строку. Более подробно это описано в PEP 498.
Подписывайтесь на канал 👉@pythonofff
👍6