Вход Блог
Строительство и ремонт
Репетиторы
Красота
Фрилансеры
Разные специалисты
Тренеры
Уход за животными
Автоинструкторы

Разработка на Python — удалённая работа в Москве

Дата: 2024-10-16
Детали
Регион
Москва
Занятость
дистанционно
Стоимость
от 2000.00 руб.
Дата публикации
2024-10-16
Описание
решение задач. Разработка с нуля. 1. Загрузка данных Работаем с набором данных FashionMNIST. Это не совсем про тексты, но зато он численный и его можно вытянуть в вектор. Ниже предлагается реализовать собственный класс для считывания, обработки и упаковки данных. training_data = datasets.FashionMNIST( root=“data“, train=True, download=True ) test_data = datasets.FashionMNIST( root=“data“, train=False, download=True ) Воспользуемся функцией загрузки данных из репозитория наборов данных. def load_mnist(path, kind='train'): import os import gzip import numpy as np “““Load MNIST data from `path`“““ labels_path = os.path.join(path, '%s-labels-idx1-ubyte.gz' % kind) images_path = os.path.join(path, '%s-images-idx3-ubyte.gz' % kind) with gzip.open(labels_path, 'rb') as lbpath: labels = np.frombuffer(lbpath.read(), dtype=np.uint8, offset=8) with gzip.open(images_path, 'rb') as imgpath: images = np.frombuffer(imgpath.read(), dtype=np.uint8, offset=16).reshape(len(labels), 784) return images, labels Реализуем класс для FasionMnist. Элементами датасета должны являться пары '(np.array, int)', массив имеет размерность (28, 28), тип элемента np.float32. import os class FashionMnist(Dataset): def __init__(self, path, train=True, image_transform=None, label_transform=None): ### YOUR CODE HERE ### LOAD IMAGES AND LABELS WITH FUNCTION ... ### ALSO PROVIDE TRANSFORMS TO APPLY self.image_transform = self.label_transform = def __len__(self,): ### YOUR CODE # RETURN LENGTH OF DATASET def __getitem__(self, idx): ### YOUR CODE HERE ### APPLY TRANSFORMS AND RETURN ELEMENTS test_dataset = FashionMnist(“data/FashionMNIST“, train=False) train_dataset = FashionMnist(“data/FashionMNIST“) Визуализируйте случайные элементы набора данных. ### YOUR CODE HERE В конструктор Dataset можно передать объект torchvision.transforms, который позволяет преобразовать исходные данные. Преобразование torchvision.transforms.ToTensor позволяет преобразоать данные из типа PIL Image и numpy.float32 в тип torch.float32 Реализуйте собственную поддержку преобразований в FashionMnist. Проверьте, что приведение типов работает корректно. class ToTensor: “““Convert ndarrays in sample to Tensors.“““ def __call__(self, sample): ### YOUR CODE HERE # SHOULD BE CALLABLE ToTensor(x) transform = ToTensor() ### YOUR CODE HERE # init dataset with your transform and check datatype Элементы набора данных могут быть объединены в пакеты (batch) явно и неявно. Если данные могут быть сконкатенированы или объединены каким-нибудь тривиальным способом, то можно не передавать никаких дополнительных парамертов в torch.utils.data.Dataloader. test_dataloader = DataLoader(test_dataset, batch_size=15, num_workers=2, shuffle=True) batch = next(iter(test_dataloader)) print(f“The length of the batch is {len(batch)}“) print(f“The shape of the batch[0] is {batch[0].shape}“) Если наша структура данных не позволяет нам использовать объединение по умолчанию, то можно написать собственную функцию, которая будет пакетировать данные. Реализуйте функцию, преобразующую последовательность элементов массива в пакет (batch). ### YOUR CODE HERE ### WRITE A COLLATE FUNCTION and use it with dataloaders test_dataloader = ### YOUR CODE HERE train_dataloader = ### YOUR CODE HERE batch = next(iter(test_dataloader)) print(f“The length of the batch is {len(batch)}“) print(f“The shape of the batch[0] is {batch[0].shape}“) 2. Реализация модулей нейронной сети Сначала нужно реализовать прямой и обратный проход через слои. Наши слои будут соответствовать следующему интерфейсу (на примере “тождественного“ слоя): Сначала, мы реализуем функцию и её градиент. class IdentityFunction(Function): “““ We can implement our own custom autograd Functions by subclassing torch.autograd.Function and implementing the forward and backward passes which operate on Tensors. “““@staticmethod def forward(ctx, input): “““ In the forward pass we receive a Tensor containing the input and return a Tensor containing the output. ctx is a context object that can be used to stash information for backward computation. You can cache arbitrary objects for use in the backward pass using the ctx.save_for_backward method. “““ return input @staticmethod def backward(ctx, grad_output): “““ In the backward pass we receive a Tensor containing the gradient of the loss with respect to the output, and we need to compute the gradient of the loss with respect to the input. “““ return grad_output Разработанную функцию обернем классом IdentityLayer, все слои в PyTorch должны быть наследниками базового класса nn.Module() class IdentityLayer(nn.Module): def __init__(self): # An identity layer does nothing super().__init__() self.identity = IdentityFunction.apply def forward(self, inp): # An identity layer just returns whatever it gets as input. return self.identity(inp) 2.1 Функция активации ReLU Для начала реализуем функцию активации, слой нелинейности ReLU(x) = max(x, 0). Параметров у слоя нет. Метод forward должен вернуть результат поэлементного применения ReLU к входному массиву, метод backward - градиент функции потерь по входу слоя. В нуле будем считать производную равной 0. При обратном проходе могут понадобиться величины, посчитанные во время прямого прохода, поэтому их стоит сохранить в ctx. class ReLUFunction(Function): @staticmethod def forward(ctx, input): ### YOUR CODE HERE ### CALCULATE RELU FUNCTION WITH TORCH AND SAVE SOMETHING FOR BACKWARD VIA CTX @staticmethod def backward(ctx, grad_output): ### YOUR CODE HERE ### GET SOMETHING FROM FORWARD AND CALCULATE GRADIENT # CHECK LECTIONS OR GOOGLE out = ... return grad_output * out class ReLU(nn.Module): def __init__(self): super().__init__() self.relu = ReLUFunction.apply def forward(self, input): return self.relu(input) Проверяем градиент, испльзуя функцию gradcheck. torch.manual_seed(0) x = torch.rand((7,15), requires_grad = True, dtype=torch.double) relu = ReLU() assert gradcheck(relu, x) torch_relu = torch.relu our_relu = ReLU() assert torch.norm(torch_relu(x.float()) - our_relu(x)) < 1e-5 2.2 Линейный слой (linear, fully-connected) Далее реализуем полносвязный слой без нелинейности. Два набора параметра: матрица весов (weights) и вектор смещения (bias). class LinearFunction(Function): @staticmethod def forward(ctx, inp, weight, bias): ### YOUR CODE HERE ### CALCULATE OUTPUT ### AND SAVE SOMETHING FOR BACKWARD return output @staticmethod def backward(ctx, grad_output): # GET SOMETHING FROM BACKWARD # CHECK HOW BACKWARD PERFORMED grad_bias = grad_output.sum(0) grad_weight = grad_output.T @ inp grad_input = grad_output @ weight return grad_input, grad_weight, grad_bias class Linear(nn.Module): def __init__(self, input_units, output_units): super().__init__() ### YOUR CODE HERE ### initialize weights and bias with small random numbers or xavier ### do not forget to make them torch.nn.Parameter self.linear = LinearFunction.apply def forward(self,inp): return self.linear(inp, self.weight, self.bias) Проверка градиента, а также сравнение с работой нашего модуля с имплементированным в PyTorch. Проверка градиента: torch.manual_seed(0) x = torch.rand((6,12), requires_grad = True, dtype=torch.double) linear = Linear(12, 14) assert gradcheck(linear, x) Сравнение с PyTorch. output_units = 32 input_units = 15 x = torch.rand((16,15), requires_grad = True, dtype=torch.double) weight = torch.rand(size=(output_units, input_units), dtype=torch.double) bias = torch.rand(size=(output_units,), dtype=torch.double) torch_linear = torch.nn.Linear(input_units, output_units, dtype=torch.double) our_linear = Linear(input_units, output_units) state_dict = OrderedDict([(“weight“, weight), (“bias“, bias)]) torch_linear.load_state_dict(state_dict) our_linear.load_state_dict(state_dict) torch_forward = torch_linear.forward(x) our_forward = our_linear(x) assert torch.allclose(torch_forward, our_forward) 3. Сборка и обучение нейронной сети Реализуйте произвольную нейросеть, состоящую из ваших блоков. Она должна состоять из нескольких полносвязанных слоев. class Network(nn.Module): def __init__(self, input_size=28*28, hidden_layers_size=32, num_layers=5, num_classes=10): super().__init__() ### YOUR CODE HERE ### STACK LAYERS WITH DEFINED PARAMETERS ### USE nn.Dropout, your linear, your relu and whatever you like ### LAST LAYER SHOULD BE nn.LogSoftmax def forward(self, inp): ### YOUR CODE HERE ### APPLY YOUR NET TO THE INPUT Написать цикл обучения. class EmptyContext: def __enter__(self): pass def __exit__(self, *args): pass # accuract metric for our classififcation def accuracy(model_labels, labels): return torch.mean((model_labels == labels).float()) def perform_epoch(model, loader, criterion, optimizer=None, device=None): is_train = optimizer is not None ### YOUR CODE HERE ### MOVE MODEL TO DEVICE ### CHANGE MODEL TO TRAIN OR EVAL MODE ### SET LOGGING VALUES ### ITERATE OVER DATALOADER ### MOVE BATCH AND LABELS TO DEVICE ### GET MODEL OUTPUT ### GET MODEL PREDICTIONS (from the probabilites) ### CALCULATE LOSS ### BACKWARD IF TRAIN ### STEP WITH OPTIMIZER (DONT FORGET TO ZERO GRAD) ### UPDATE LOGGING VALUES WITH LOSS AND ACCURACY ### RETURN LOGGED VALUES Теперь обучим нашу нейронную сеть. # INIT YOUR MODEL # CRITERION # AND OPTIMIZER # Add device # SET NUMBER OF EPOCHS # ITERATE OVER NUMBERS OF EPOCH # TRAIN AND VALIDATE # LOG METRICS FOR TRAIN AND VAL LIKE BELOW. (YOU MAY USE YOUR OWN WAY) print(f“Epoch - {epoch} : loss {loss}, accuracy {acc}“) Дальше: Проведите эксперименты с числом слоев. Постройте графики зависимости качества модели на тренировочной и тестовой выборках от числа слоев. Для получения статистически значимых результатов повторите эксперименты несколько раз. Сделайте выводы.
Похожие заказы

Разработка на Python

дистанционно
договорная
Разработка python-скрипта. Разработка с нуля. Пожелания и особенности: TLDR: Ищу человека, который быстро навайбкодит простой скрипт на python, который заменяет текст в полях в презентации pptx Подробно: На вход скрипт получает шаблон презентации в pptx, в котором фиксированное число порядка 5 текстовых полей в конкретных местах презентации, и иксель-таблицу с вариантами заполнения полей Часть полей для примера - название, срок, доходность. В искель-таблице будет n строк - например 100 строк. В каждой строке название, срок, доходность и имя файла На выходе 100 презентаций .pptx и pdf с заданными названиями в той же папке с такими комбинациями текстовых полей У меня есть питон, я умею запускать .py или .ipynb файлы в VSCode - нужно, чтобы скрипт запускался у меня на компьютере. Готов заплатить 10 тыс рублей, если человек сделает это за пару вечеров.
Москва Фрилансеры

Разработка на Python

дистанционно
договорная
Веб-разработка. Доработка существующего продукта, или новая. Сделать несложного бота.
Москва Фрилансеры

Разработка на Python

дистанционно
договорная
Веб-разработка. Доработка существующего продукта.
Москва Фрилансеры

Разработка на Python

дистанционно
договорная
Совет по коду. Настройка, тестирование, доработка существующего продукта. Пожелания и особенности: Цена условная, договорная! Подробности уточните в лс, пожалуйста. Код простой, небольшие части. Нужен человек который сможет улучшить структуру работы кода, исправить ошибки и дать совет. Важно уложиться в сроки. Сегодня договориться и завтра поработать совместно в звонке.
Москва Фрилансеры

Разработка на Django

дистанционно
договорная
задача на Django. Доработка существующего продукта. Подготовка к выполнению задания Клонируйте репозиторий django-sprint1 на свой компьютер, в рабочую папку Dev. Репозиторий должен был появиться в вашем аккаунте на GitHub сразу после того, как вы открыли этот урок. Разверните и активируйте виртуальное окружение в папке Dev/django-sprint1, установите в виртуальное окружение зависимости из requirements.txt. Подсказки есть в уроке Из тренажёра на компьютер. Настройка VS Сode. Создайте новый Django-проект blogicum. В этом поможет урок Создание Django-проекта. Приложения. Должна получиться такая структура: Dev ??? django-sprint1/ ??? .vscode/ Служебная папка редактора кода (опционально, скрытая) ??? .git/ Служебная информация Git (скрытая) ??? html/ HTML-вёрстка для страниц и статика ??? tests/ Тесты Яндекс Практикума, проверяющие проект ??? venv/ Виртуальное окружение ??? blogicum/ <-- Рабочая папка с вашим кодом проекта ??? .flake8 Настройки тестов Практикума ??? .gitignore Список файлов и папок, которые не отслеживает Git ??? LICENSE Лицензия ??? pytest.ini Конфигурация тестов Практикума ??? README.md Описание проекта ??? requirements.txt Зависимости проекта Задание Создайте и зарегистрируйте приложения: pages — это приложение понадобится для работы со статическими страницами проекта; blog — тут будет происходить вся работа с публикациями пользователей. Описание процесса есть в уроке Создание Django-проекта. Приложения. Опишите маршруты и напишите соответствующие view-функции согласно таблице: Адрес Приложение Функция-обработчик Имя шаблона '' blog index index.html 'posts//' blog post_detail detail.html 'category//' blog category_posts category.html 'pages/about/' pages about about.html 'pages/rules/' pages rules rules.html Для каждого адреса установите namespaсe и name, совпадающие с именем приложения и view-функции соответственно. В файле views.py приложения blog разместите список posts. Каждый элемент этого списка — словарь, в котором хранится вся информация об отдельном посте. Информация из этого словаря должна будет выводиться на страницы проекта. Подобную работу вы уже делали в задании 3 урока Словарь контекста, ветвление и циклы в шаблонах. posts = [ { 'id': 0, 'location': 'Остров отчаянья', 'date': '30 сентября 1659 года', 'category': 'travel', 'text': '''Наш корабль, застигнутый в открытом море страшным штормом, потерпел крушение. Весь экипаж, кроме меня, утонул; я же, несчастный Робинзон Крузо, был выброшен полумёртвым на берег этого проклятого острова, который назвал островом Отчаяния.''', }, { 'id': 1, 'location': 'Остров отчаянья', 'date': '1 октября 1659 года', 'category': 'not-my-day', 'text': '''Проснувшись поутру, я увидел, что наш корабль сняло с мели приливом и пригнало гораздо ближе к берегу. Это подало мне надежду, что, когда ветер стихнет, мне удастся добраться до корабля и запастись едой и другими необходимыми вещами. Я немного приободрился, хотя печаль о погибших товарищах не покидала меня. Мне всё думалось, что, останься мы на корабле, мы непременно спаслись бы. Теперь из его обломков мы могли бы построить баркас, на котором и выбрались бы из этого гиблого места.''', }, { 'id': 2, 'location': 'Остров отчаянья', 'date': '25 октября 1659 года', 'category': 'not-my-day', 'text': '''Всю ночь и весь день шёл дождь и дул сильный порывистый ветер. 25 октября. Корабль за ночь разбило в щепки; на том месте, где он стоял, торчат какие-то жалкие обломки, да и те видны только во время отлива. Весь этот день я хлопотал около вещей: укрывал и укутывал их, чтобы не испортились от дождя.''', }, ] Создайте шаблоны страниц и разместите их на уровне проекта. Вёрстку шаблонов сделайте на основе html-файлов, которые хранятся в директории html. Подсказки и описание структуры файлов для директории templates есть в уроках спринта. Подключите статику. В репозитории, в директории html, лежат папки со статикой: css и img. Сохраните статику на уровне проекта и подключите её к шаблонам — подобно тому, как это описано в уроке Подключение стилей, картинок и скриптов к шаблонам. Вывод информации на страницы проекта На главную страницу проекта выведите полный список публикаций из словаря posts. В директории html есть уже свёрстанная главная страница проекта: index.html. Переделайте её в Django-шаблон и сохраните в директории для шаблонов проекта. Порядок вывода постов должен быть таким же, как в исходном файле index.html. Вёрстка отдельной страницы публикации подготовлена в файле html/detail.html. На эту страницу должен быть выведен полный текст поста. На страницу категории ('category//') посты выводить пока что не надо; выведите на эти страницы лишь значение category_slug из адреса. Например, для адреса http://127.0.0.1:8000/category/personal/ выведите personal; текст на этой странице должен быть таким: «Публикации в категории personal». Публикации должны передаваться в шаблоны в словаре контекста под ключом post. Не применяйте к дате публикации фильтр шаблонов date — это сейчас строка, а не объект даты. Шаблоны about.html и rules.html из директории html сохраните на уровне проекта и подключите к соответствующим view-функциям приложения pages. Проверка Вот так должен выглядеть в браузере результат вашей работы: После выполнения задания: Запустите тесты локально, на компьютере. В активированном виртуальном окружении через терминал из папки Dev/django-sprint1 выполните команду pytest. Если все тесты пройдены успешно, то можно отправлять проект на GitHub. Структура папок в вашем репозитории должна быть такой: django-sprint1/ ??? html/ Шаблоны для выполнения задания ??? tests/ Тесты Практикума, проверяющие проект ??? blogicum/ <-- Рабочая папка с вашим кодом ??? .flake8 Настройки тестов Практикума ??? .gitignore Список файлов и папок, скрытых от отслеживания Git ??? LICENSE Лицензия ??? pytest.ini Конфигурация тестов Практикума ??? README.md Описание проекта ??? requirements.txt Зависимости проекта Отправьте задание на проверку. На странице задания на вкладке ревью нажмите кнопку «Отправить новую версию». На учебной платформе запустятся автоматические тесты, которые проверят ваше задание. Если автоматические тесты пройдены успешно — ваш проект отправится на проверку человеку-ревьюеру. Скорее всего, он оставит комментарии и попросит внести правки. Задание считается выполненным, когда исправлены все замечания с пометкой «Надо исправить». Задание считается выполненным прекрасно, если вам удастся реализовать все рекомендации с пометкой «Можно лучше».
Москва Фрилансеры

Разработка на Python

дистанционно
договорная
Веб-разработка. Настройка, доработка существующего продукта. Задачи: Найти ошибки в работе регистрации пользователей. Выявить причины сбоев и некорректной работы форм. Исправить найденные ошибки. Проверить корректность работы после внесения изменений.
Москва Фрилансеры

Разработка на Python

дистанционно
договорная
-. скажу. Расскажу.
Санкт-Петербург Фрилансеры