Читайте Pytorch предложение за предложением (обновлено)

искусственный интеллект Keras PyTorch задняя часть

Попытка понять концепции и методы глубокого обучения из фрагментов кода и исходного кода pytorch.

возвращениеСтатьи общего каталога

Видеозаметки обновляются в хронологическом порядке, чем дальше, тем новее

Большинство видео стремятся быть управляемыми в течение 5-8 минут, и очень немногие — более 10 минут.


Как использовать pytorch numpy

Как понять pytorch.Variable

Как pytorch находит производные

Как pytorch находит нормуL1L2

Печать формул функций в коде

Быстро рисовать графики функций

Мысли о сборке и анализе исходного кода

Понимание Norm_L2 с конкретными приложениями

Как перевернуть исходный код pytorch с python на C

Поверхностное понимание структуры библиотеки исходного кода pytorch


официальные руководства pytorch

tutorials 01-03

Как построить модель с помощью pytorch:

  • nn.Module, nn.Functional, forward, num_flat_features, inherit, overwrite

Как выполнить прямую и обратную передачу с помощью pytorch

  • net.parameters, loss.grad_fn.next_functions[0][0], net.zero_grad
  • criterion = nn.MSELoss(), loss = criterion(output, target)
  • optimizer = optim.SGD(net.parameters(), lr=0.01), optimizer.zero_grad, optimizer.step

net.zero_grad() == утилита == оптимизатор.zero_grad()

  • net.parameters() == утилита == оптимизатор.param_groups[0]['params']

параметры вызова net и оптимизатора различаются

  • net.parameters() генерирует генератор, используйте for в цикле для вызова всех параметров
  • optimizer.param_groups генерирует список, затем optimizer.param_groups[0] — это словарь, затем optimizer.param_groups[0]['params'] вызывает все параметры
  • lst = list(net.parameters()) преобразует генератор в список, но ему должно быть присвоено значение

Как optimizer.step обновляет параметры

  • p.data.add_(-group['lr'], d_p)

Как вызвать метод, атрибуты внутри net.conv1

  • net.conv1.weight, net.conv2.bias.grad, net.fc1.zero_grad

Что именно происходит при сборке optim.SGD

  • optimizer.param_groups[0].keys()

Как pytorch заимствует THNN для расчета MSELoss, Проверьте, работает ли THNN

Что собственная модель Net наследует от nn.Module

  • `super(Net, self).__init__()` при запуске суперкласса init наследует все методы
  • Net overwrite `init(), forward()` write a new func `num_flat_features()` for itself

функции dir и repr в nn.Module

  • self._modules.keys(), self.__dict__.keys()
  • lst = list(self._buffers.keys()), sorted(keys)

Что встроено в nn.Conv2d

  • nn.Conv2d -> nn._ConvND -> nn.Module
  • nn._ConvND: init, reset_parameters

Что происходит внутри F.Conv2d?

  • ConvNd = torch._C._functions.ConvNd

self.conv1(x) сначала запускает __getattr__, а затем __call__

Как установить gdb для отладки на всем пути от python до C/C++

Анализ nn.MSELoss 01

  • MSELoss -> _Loss -> Module
  • Содержит init, forward, pre_forward_hooks, forward_hooks, back_hooks

Анализ nn.MSELoss 02

  • _functions.thnn.MSELoss.apply(input, target, size_average) вызывает torch._C для вычисления функции mseloss
  • ctx == _ContextMethodMixin, а как его вызывать, процесс не ясен
  • попытайтесь понять широту этого подхода

Анализ оптим.SGD

  • __init__: переупаковать параметры, значения по умолчанию (включая гиперпараметр dict) в self.param_groups
  • Простота в использовании

Весь процесс расчесывания pytorch общее моделированиекод

Весь процесс разборки мультиклассификационного моделирования pytorchкод

Примечания к параметру Loss для задач бинарной классификации:код 3

  • Если используется BCEWithLogitsLoss
  • Тип признаков, целей должен быть унифицирован как torch.FloatTensor.
  • Размер целей должен быть стандартизирован как (-1, 1)
  • Если вы используете CrossEntryLoss
  • Тип целей должен быть torch.LongTensor.
  • Процесс нащупывания: процесс фактического обнаружения ошибок и поиска решений.
  • part1, part2, part3

Исследуйте Керас изнутридлинная интерпретация

  • Просмотр основных модулей внутри keras 0:00-7:50
  • keras.models.Sequential внутренности -- 13:38
  • keras.legacy.interfaces...оболочка позволяет keras1 общаться с keras2 -- 15:36
  • keras.models.add --22.10

Почему pytorch более дружелюбен к новичкаминтерпретировать

  • Отлаживать слой за слоем легче, это видео доказывает, что код keras сложно читать в режиме отладки

Создайте свой собственный класс данных с помощью pytorchдокументация по коду part1, part2, part3, part4, Резюме

  • Храните свои собственные данные, преобразовывайте, пакетируйте, перемешивайте

Как использовать Variable.backward?

y.backward()
y.backward(torch.FloatTensor(x.size())

Как показать, как обрабатывать входные и выходные значения промежуточных слоев

net.conv2.register_forward_hook(printnorm)
net.conv2.register_backward_hook(printgradnorm)

Как просмотреть параметры слоя документация по коду

conv2_param_list = list(self.parameters()) # self: conv2
conv2_param_list.__len__() # 2
conv2_param_list[0].size() 

transfer_learning_tutorial

Как наложить несколько преобразований изображения документация по коду

data_transforms = {
    'train': transforms.Compose([
        transforms.RandomSizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Scale(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

Как ImageFolder преобразует папку изображения в формат данных модели

data_dir = '/Users/Natsume/Desktop/data/hymenoptera_data'
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),
                                          data_transforms[x])
                  for x in ['train', 'val']}

Как внедрить переменную информацию в цвет временного ряда

ax1 = plt.subplot2grid((2, 1), (0, 0), colspan=1, rowspan=1)
ax1.set_title("original close price with mv_avg_volume window %d" %vol_window)
# plot predictions(pct) as color into prices
for start, stop, col in zip(xy[:-1], xy[1:], color_data):
    x, y = zip(start, stop)
    ax1.plot(x, y, color=uniqueish_color3(col))

Как использовать загрузчик данных для пакетного и случайного

dataloders = {x: torch.utils.data.DataLoader(
             image_datasets[x], batch_size=4, shuffle=True, num_workers=4)
                                             for x in ['train', 'val']}

Построение мини-партии

def imshow(inp, title=None):
    """Imshow for Tensor."""
    inp = inp.numpy().transpose((1, 2, 0))
    mean = np.array([0.485, 0.456, 0.406])
    std = np.array([0.229, 0.224, 0.225])
    inp = std * inp + mean
    plt.imshow(inp)
    if title is not None:
        plt.title(title)
    plt.pause(0.001)  # pause a bit so that plots are updated

inputs, classes = next(iter(dataloders['train']))
out = torchvision.utils.make_grid(inputs)
imshow(out, title=[class_names[x] for x in classes])

Прямой вызов известных моделей и их параметров для использования

model_ft = models.resnet18(pretrained=True)

Вызываются известные внутренности модели

model_ft = models.resnet18(pretrained=True)

Индивидуальная модификация обученной высокоуровневой модели

model_ft.fc = nn.Linear(num_ftrs, 2)

Отладка алгоритмов оптимизации LR Назначение Структура использования

exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)

Структура пользовательской обучающей функции train_model

for epoch in range(num_epochs):
    for phase in ['train', 'val']:
        for data in dataloders[phase]:
# -0.26s val

Использование scheduler.step и model.train

def step(self, epoch=None):
    if epoch is None:
        epoch = self.last_epoch + 1
    self.last_epoch = epoch
    for param_group, lr in zip(self.optimizer.param_groups, self.get_lr()):
        param_group['lr'] = lr
def get_lr(self):
        return [base_lr * self.gamma ** (self.last_epoch // self.step_size)
                for base_lr in self.base_lrs]
def train(self, mode=True):
        """Sets the module in training mode.
        This has any effect only on modules such as Dropout or BatchNorm.
        """
        self.training = mode
        for module in self.children():
            module.train(mode)
        return self

Как большинство параметров заимствованной усовершенствованной модели остаются прежними

# 阻止计算参数的gradients
param.requires_grad = False

После обучения нарисуйте партию графиков

for j in range(inputs.size()[0]):
    images_so_far += 1
    ax = plt.subplot(num_images//2, 2, images_so_far)
    ax.axis('off')
    ax.set_title('predicted: {}'.format(class_names[preds[j]]))
    imshow(inputs.cpu().data[j])

Как создать свой собственный класс набора данных

from torch.utils.data import TensorDataset, DataLoader
train_dataset = TensorDataset(train_features.data, train_targets.data)
train_loader = DataLoader(train_dataset, batch_size=64,
                        shuffle=True, num_workers=1)

YunJey | pytorch-tutorial

Получение pytorch для использования tensorboard документация по коду

让pytorch使用tensorboard
1. torchvision.datasets.MNIST()
1. iter(data_loader): 构建iterator
2. tensor.view == np.reshape
3. argmax.squeeze() 去除(n, m, 1)中的1
4. tensor.float(): 改变type
5. logger: 
	plot curves: loss, acc are scalar; 
	plot histogram: params, grads, np.array;
	plot images: from tensor to (m, h, w)

AI-challenger stock