美文网首页
Pytorch-可视化

Pytorch-可视化

作者: WAI_f | 来源:发表于2020-05-13 23:20 被阅读0次

在之前的章节里演示了怎么加载数据,给模型传递数据,在训练集上训练模型,在测试集上测试模型。
为了能够看到发生了什么,我们打印出一些统计数据,观测训练的进展。然而,我们可以做到更多:Pytorch 集成了tensorboard,一个用来可视化神经网络训练的工具。本节将会介绍tensorboard一些功能并学习:

  • 读取数据时添加一些合适的数据转换;
  • 设置tensorboard;
  • 写入tensorboard;
  • 使用tensorboard检查一个模型文件;
  • 更简单的使用tensorboard创建一个可视化的交互版本。

特别的,关于最后一点,我们将会看到:

  • 几种方法检查训练数据;
  • 怎么跟踪我们的模型在训练时的表现;
  • 一旦模型开始训练,怎么评价模型的表现;

数据加载部分代码:

# transform
transform = transforms.Compose([transforms.ToTensor(),
                                transforms.Normalize((0.5,), (0.5,))])

# dataset
trainset = torchvision.datasets.FashionMNIST('./data',
                                             download=True,
                                             train=True,
                                             transform=transform)
testset = torchvision.datasets.FashionMNIST('./data',
                                            download=True,
                                            train=False,
                                            transform=transform)
trainloader = torch.utils.data.DataLoader(trainset,
                                          batch_size=4,
                                          shuffle=True,
                                          num_workers=2)
testloader = torch.utils.data.DataLoader(testset,
                                         batch_size=4,
                                         shuffle=False,
                                         num_workers=2)


# show image
def pltshow(img, one_channel=False):
    if one_channel:
        img = img.mean(dim=0)
    img = img / 2 + 0.5
    npimg = img.numpy()
    if one_channel:
        plt.imshow(npimg, cmap='Greys')
    else:
        plt.imshow(np.transpose(npimg, (1, 2, 0)))

模型定义:

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.pool1 = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 4 * 4, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool1(F.relu(self.conv1(x)))
        x = self.pool1(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 4 * 4)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x


net = Net()

定义损失函数以及优化器:

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

1. TensorBoard设置

首先设置tensorboard,从torch.utils导入tensorboard

from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter('runs/fashion_mnist_experiment_1')

上面两行代码会创建一个"runs/fashion_mnist_experiment_1"文件夹。

运行时可能会报错提示没有安装tensorboard,进入anaconda虚拟环境,conda install tensorboard就可以了。

2. 写入Tensorboard

向tensorboard写入一个图像,make_grid会将一组图片拼接在一起组成一个新的图片:

    dataiter = iter(trainloader)
    images, labels = dataiter.next()
    img_grid = torchvision.utils.make_grid(images)
    writer.add_image('four_mnist_images', img_grid)

现在打开anaconda,进入安装了pytorch的虚拟环境,然后输入命令:

tensorboard --logdir=E:\program\python\pytorch-test\basic\runs
logdir后面是log保存的绝对路径,需要按照实际情况进行修改,运行成功的话会有如下图提示:

向谷歌或者火狐浏览器中输入上图中提示的网址:


3. 查看网络模型

Tensorboard一个强大之处是它可以可视化复杂模型的结构:

writer.add_graph(net,images)
writer.close()
刷新tensorboard网页,查看gragh:

4. 跟踪模型训练

在之前的示例,我们只是简单的打印模型运行的loss。现在我们可以保存log到tensorboard,查看运行过程中loss的走势:

    running_loss = 0.0
    for epoch in range(1):  # loop over the dataset multiple times

        for i, data in enumerate(trainloader, 0):

            # get the inputs; data is a list of [inputs, labels]
            inputs, labels = data

            # zero the parameter gradients
            optimizer.zero_grad()

            # forward + backward + optimize
            outputs = net(inputs)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()

            running_loss += loss.item()
            if i % 1000 == 999:  # every 1000 mini-batches...

                # ...log the running loss
                writer.add_scalar('training loss',
                                  running_loss / 1000,
                                  epoch * len(trainloader) + i)

                # ...log a Matplotlib Figure showing the model's predictions on a
                # random mini-batch
                writer.add_figure('predictions vs. actuals',
                                  plot_classes_preds(net, inputs, labels),
                                  global_step=epoch * len(trainloader) + i)
                running_loss = 0.0
    print('Finished Training')
查看tensorboard:

结语

本节代码可以从github上下载,github上提供了python两个版本的入门程序,仅供大家参考。今天查了一天的libtorch trace模型的方法,可惜网上一点资料都没有,Pytorch官网也没有任何说明,可能libtorch不支持freeze模型,那这样的话libtorch的意义就小了很多啊!我用C++训练完模型却不能部署,这不是逗我嘛!瞬间失去了学习libtorch的热情。

相关文章

  • Pytorch-可视化

    在之前的章节里演示了怎么加载数据,给模型传递数据,在训练集上训练模型,在测试集上测试模型。为了能够看到发生了什么,...

  • Pytorch-简介

    从本节起,我将会从Pytorch官网翻译部分教程,也会添加一部分自己的想法,如有错误,希望大家能够指出! Tens...

  • pytorch- 参数详解

    nn.Conv2d()是卷积层,里面常用的参数有四个,in_channels, out_channels, ker...

  • pytorch-常用函数

    卷积层 class torch.nn.Conv2d(in_channels, out_channels, kern...

  • Pytorch-自动微分

    Pytorch中神经网络的核心就是autograd包。在这里将会简要介绍autograd,并在后续的章节介绍怎么训...

  • Pytorch-训练模型

    上一节已经介绍了怎么定义网络,计算损失函数以及更新权重,这一节将介绍如何开始训练模型。 What about da...

  • Pytorch-神经网络

    神经网络可以通过torch.nn工具包创建,在前面我们已经简单介绍了autograd,nn依靠autograd定义...

  • 3. pytorch-激活函数

    常见激活函数 relu sigmod tanh softplus 示例代码

  • 4. pytorch-简单分类

  • 5. pytorch-项目流程

    1. 数据准备 基本步骤: 生成Dataset(或其子类)对象->传入DataLoader(为可迭代对象,可以用f...

网友评论

      本文标题:Pytorch-可视化

      本文链接:https://www.haomeiwen.com/subject/kaawnhtx.html