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

Разработка на 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

дистанционно
договорная
Веб-разработка. Разработка с нуля, доработка существующего продукта. Создать прототип облегченной GRC-системы для раннего выявления управленческих рисков и управления ими. Есть защищенная авторским правом методология, общее понимание архитектуры проекта. Есть экспертное понимание цели и принципа работы, понимание наполнения ПО. На Python (с Node.js и прочим) подготовить работоспособный проект, который может выполнять тестовые задания после ввода данных. С нормальным интуитивно понятным интерфейсом и админкой, чтобы можно было демонстрировать визуально, делать скрины для презентаций продукта. В ходе взаимодействия с успешным исполнителем будут добавляться новые задачи: имитационная модель (дерево решений), интеграция с ИИ и прочее, с дополнительной оплатой. Обязательно заключение NDA и жесткое исполнение законодательства об авторском праве и интеллектуальной собственности. Пишите, уважаемые фрилансеры, обо всем договоримся.
Москва Фрилансеры

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

дистанционно
договорная
программирование. Разработка с нуля. Нужно написать код на питоне чтобы Решить краевую задачу для обыкновенного дифференциального уравнения второго порядка на указанном отрезке методом стрельбы и конечно-разностным методом. Нельзя использовать встроенные функции.
Санкт-Петербург Фрилансеры

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

дистанционно
договорная
для linux сервера. Разработка с нуля. Пришлю подробное ТЗ. нужно разработать скрипт на python для резервного копирования.
Москва Фрилансеры

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

дистанционно
договорная
Разработка ПО с интерфейсом. Разработка с нуля. 1. Уравнения эмпирических зависимостей - получить аппроксимирующие зависимости, описывающие нелинейное взаимодействие температурного фактора и конструктивных параметров ВС в диапазоне –30…–55 °C, с доказанной статистической значимостью (критерий Фишера, p<0,05)». 2. Обработка экспериментальных данных и разработка программного модуля. Получить верифицированные эмпирические зависимости и программный инструмент для прогнозирования эксплуатационной готовности легкомоторных ВС при экстремально низких температурах (–30…–55 °C). 3. 3D-графики на основе полиномов - «Визуализация многопараметрических зависимостей, которая позволяет выявить ранее неформализованные зоны оптимальных режимов эксплуатации и критические пороги перехода между ними».
Москва Фрилансеры

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

дистанционно
договорная
Веб-разработка. Доработка существующего продукта. Пожелания и особенности: Python Django 1.4.8. ТЗ в файле ниже Робокасса уже подключена к сайту, просто нужно систему подписок разработать, чтобы пользователи её оплачивали через робокассу.
Москва Фрилансеры

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

дистанционно
договорная
Прошу пройти программу вуза. Несколько тем (2мерные масивы).
Москва Фрилансеры

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

дистанционно
договорная
Помочь с программой вуза. 2мерные массивы,подпрограммы.
Москва Фрилансеры