Академический Документы
Профессиональный Документы
Культура Документы
sim0nsays / dlcourse_ai
master
dlcourse_ai / assignments / assignment2 / PyTorch.ipynb Go to file
Simon Kozlov
Stronger values Latest commit
1d76129
on 26 Jun 2019
History
1
contributor
https://github.com/sim0nsays/dlcourse_ai/blob/master/assignments/assignment2/PyTorch.ipynb 1/6
26.08.2021 dlcourse_ai/PyTorch.ipynb at master · sim0nsays/dlcourse_ai · GitHub
https://pytorch.org/get-started/locally/ (https://pytorch.org/get-started/locally/)
В этом задании мы познакомимся с основными компонентами PyTorch и натренируем несколько небольших моделей.
Основные ссылки:
https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html (https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html)
https://pytorch.org/docs/stable/nn.html (https://pytorch.org/docs/stable/nn.html)
https://pytorch.org/docs/stable/torchvision/index.html (https://pytorch.org/docs/stable/torchvision/index.html)
import torch.nn as nn
%matplotlib inline
import numpy as np
transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.43,0.44,0.47],
std=[0.20,0.20,0.20])
])
transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.43,0.44,0.47],
std=[0.20,0.20,0.20])
]))
DataLoader подгружает данные, предоставляемые классом Dataset, во время тренировки и группирует их в батчи.
Он дает возможность
указать Sampler, который выбирает, какие примеры из датасета использовать для тренировки. Мы используем это, чтобы разделить данные
на training и validation.
In [ ]: batch_size = 64
data_size = data_train.data.shape[0]
validation_split = .2
indices = list(range(data_size))
np.random.shuffle(indices)
train_sampler = SubsetRandomSampler(train_indices)
val_sampler = SubsetRandomSampler(val_indices)
sampler=train_sampler)
sampler=val_sampler)
В нашей задаче мы получаем на вход изображения, но работаем с ними как с одномерными массивами. Чтобы превратить многомерный
массив в одномерный, мы воспользуемся очень простым вспомогательным модулем Flattener.
https://github.com/sim0nsays/dlcourse_ai/blob/master/assignments/assignment2/PyTorch.ipynb 2/6
26.08.2021 dlcourse_ai/PyTorch.ipynb at master · sim0nsays/dlcourse_ai · GitHub
class Flattener(nn.Module):
batch_size, *_ = x.shape
Flattener(),
nn.Linear(3*32*32, 100),
nn.ReLU(inplace=True),
nn.Linear(100, 10),
nn_model.type(torch.FloatTensor)
loss = nn.CrossEntropyLoss().type(torch.FloatTensor)
Тренируем!
Ниже приведена функция train_model, реализующая основной цикл тренировки PyTorch.
Каждую эпоху эта функция вызывает функцию compute_accuracy, которая вычисляет точность на validation, эту последнюю функцию
предлагается реализовать вам.
In [ ]: # This is how to implement the same main train loop in PyTorch. Pretty easy, right?
loss_history = []
train_history = []
val_history = []
loss_accum = 0
correct_samples = 0
total_samples = 0
prediction = model(x)
loss_value = loss(prediction, y)
optimizer.zero_grad()
loss_value.backward()
optimizer.step()
_, indices = torch.max(prediction, 1)
correct_samples += torch.sum(indices == y)
total_samples += y.shape[0]
loss_accum += loss_value
loss_history.append(float(ave_loss))
train_history.append(train_accuracy)
val_history.append(val_accuracy)
print("Average loss: %f, Train accuracy: %f, Val accuracy: %f" % (ave_loss, train_accuracy, val_accur
acy))
"""
"""
# TODO: Implement the inference of the model on all of the batches from loader,
return 0
https://github.com/sim0nsays/dlcourse_ai/blob/master/assignments/assignment2/PyTorch.ipynb 3/6
26.08.2021 dlcourse_ai/PyTorch.ipynb at master · sim0nsays/dlcourse_ai · GitHub
nn_model = nn.Sequential(
nn_model.type(torch.FloatTensor)
nn_model = nn.Sequential(
# Hint: look up learning rate schedulers in PyTorch. You might need to extend train_model function a little b
it too!
nn_model = nn.Sequential(
Первая часть - реализовать код на PyTorch, который вычисляет все предсказания модели на validation set.
Чтобы это сделать мы приводим код SubsetSampler, который просто проходит по всем заданным индексам последовательно и составляет из
них батчи.
Реализуйте функцию evaluate_model, которая прогоняет модель через все сэмплы validation set и запоминает предсказания модели и
истинные метки.
Arguments:
self.indices = indices
def __iter__(self):
def __len__(self):
return len(self.indices)
"""
Computes predictions and ground truth labels for the indices of the dataset
Returns:
"""
Confusion matrix
Первая часть визуализации - вывести confusion matrix (https://en.wikipedia.org/wiki/Confusion_matrix
(https://en.wikipedia.org/wiki/Confusion_matrix) ).
Confusion matrix - это матрица, где каждой строке соответствуют классы предсказанный, а столбцу - классы истинных меток (ground truth).
Число с координатами i,j - это количество сэмплов класса j, которые модель считает классом i.
Для того, чтобы облегчить вам задачу, ниже реализована функция visualize_confusion_matrix которая визуализирует такую матрицу.
"""
[i][j] should have the count of samples that were predicted to be class i,
"""
# Adapted from
# https://stackoverflow.com/questions/2897826/confusion-matrix-with-number-of-classified-misclassified-in
stances-on-it-python
size = confusion_matrix.shape[0]
fig = plt.figure(figsize=(10,10))
plt.title("Confusion matrix")
plt.ylabel("predicted")
plt.xlabel("ground truth")
cb = fig.colorbar(res)
plt.xticks(np.arange(size))
plt.yticks(np.arange(size))
"""
Returns:
https://github.com/sim0nsays/dlcourse_ai/blob/master/assignments/assignment2/PyTorch.ipynb 5/6
26.08.2021 dlcourse_ai/PyTorch.ipynb at master · sim0nsays/dlcourse_ai · GitHub
Returns:
"""
visualize_confusion_matrix(confusion_matrix)
Как и раньше, вам дана функция visualize_images, которой нужно воспрользоваться при реализации функции
visualize_predicted_actual. Эта функция должна вывести несколько примеров, соответствующих заданному элементу матрицы.
"""
"""
fig = plt.figure(figsize=(10,1.5))
fig.suptitle(title)
plt.subplot(1,to_show, i+1)
plt.axis('off')
sample = data[index][0]
plt.imshow(sample)
"""
Visualizes images of a ground truth class which were predicted as the other class
"""
# predictions and ground_truth are provided for validation set only, defined by val_indices
# https://docs.scipy.org/doc/numpy/user/basics.indexing.html#index-arrays
https://github.com/sim0nsays/dlcourse_ai/blob/master/assignments/assignment2/PyTorch.ipynb 6/6