Pytorch构建神经网络三(29-33节)——笔记

官方博客链接

deeplizard.com

4.1&4.2 使用tensorboard可视化CNN训练指标

pytorch1.1.0以上的版本已经自动增加了tensorboard
在终端输入“tensorboard --version”可查看tensorboard的版本
在终端输入“tensorboard --logdir=runs”进入tensorboard(在写了tensorboard数据的路径下,否则找不到数据)

(本节课的笔记很少,如果需要用到tensorboard,可以专门再看第30节课,看30节课相关的博客,再查找相关函数的使用方法进行)

详解PyTorch项目使用TensorboardX进行训练可视化
这个链接详细介绍了三种初始化 SummaryWriter 的方法和如何添加数据的方法:

from tensorboardX import SummaryWriter

# Creates writer1 object.
# The log will be saved in 'runs/exp'
writer1 = SummaryWriter('runs/exp')

# Creates writer2 object with auto generated file name
# The log directory will be something like 'runs/Aug20-17-20-33'
writer2 = SummaryWriter()

# Creates writer3 object with auto generated file name, the comment will be appended to the filename.
# The log directory will be something like 'runs/Aug20-17-20-33-resnet'
writer3 = SummaryWriter(comment='resnet')

  1. 提供一个路径,将使用该路径来保存日志
  2. 无参数,默认将使用 runs/日期时间 路径来保存日志
  3. 提供一个 comment 参数,将使用 runs/日期时间-comment 路径来保存日志
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
​
from torch.utils.tensorboard import SummaryWriter
​
torch.set_printoptions(linewidth=120)
torch.set_grad_enabled(True)
​
# out:<torch.autograd.grad_mode.set_grad_enabled at 0x2ae0ef5b488>
print(torch.__version__)
print(torchvision.__version__)
# out:
# 1.9.0
# 0.10.0
def get_num_correct(preds,labels):
    return preds.argmax(dim=1).eq(labels).sum().item()
class Network(nn.Module):
    def __init__(self):
        super(Network,self).__init__()
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5)
        self.conv2 = nn.Conv2d(in_channels=6, out_channels=12, kernel_size=5)
        
        self.fc1 = nn.Linear(in_features=12*4*4, out_features=120)
        self.fc2 = nn.Linear(in_features=120, out_features=60)
        self.out = nn.Linear(in_features=60, out_features=10)
    
    def forward(self, t):
        t = t 
        t = F.relu(self.conv1(t))
        t = F.max_pool2d(t, kernel_size=2, stride=2)
        
        t = F.relu(self.conv2(t))
        t = F.max_pool2d(t, kernel_size=2, stride=2)
        
        t = t.reshape(-1, 12*4*4)  # t.flatten(start_dim=1)
        t = F.relu(self.fc1(t))
        
        t = F.relu(self.fc2(t))
        
        t = self.out(t)
        return t
        
train_set = torchvision.datasets.FashionMNIST(
    root = './data/FashionMNIST',
    train = True,
    download = True,
    transform = transforms.Compose([
        transforms.ToTensor()
    ])
)
train_loader = torch.utils.data.DataLoader(train_set, batch_size=100, shuffle=True)

报错

导入的代码没有提示错误,但是执行之后说没有这个模块

from torch.utils.tensorboard import SummaryWriter

out:
No module named 'tensorboard'

from torch.utils.tensorboard import SummaryWriter导入不成功问题
这个链接解决了这个问题

#由于pytorch本身不自带tensorboard包,一般这样报错都是由于未安装tensorboard包导致的。
#可以通过pip 加载清华镜像源进行安装
sudo pip install  -i https://mirrors.aliyun.com/pypi/simple/ tensorboard

Starting out with TensorBoard (Network Graph and Images)

详解PyTorch项目使用TensorboardX进行训练可视化
这是一个类似的链接

如何进入可视化的界面

在cmd中进行操作:

tensorboard --version

out:
TensorFlow installation not found - running with reduced feature set.
2.7.0

在这里插入图片描述

(pytorch_1.9) C:\Users\liu>tensorboard --logdir=runs

out:
TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.7.0 at http://localhost:6006/ (Press CTRL+C to quit)

然后再浏览器中输入http://localhost:6006/ ,下面是打开的界面,下面的界面是没有数据的界面
在这里插入图片描述
这是因为tensorboard 没看找到记录,因为我们在 C:\Users\liu路径下运行了上面的代码,但是这个路径下并没有runs文件夹。但是在代码执行(test-1.py是我们执行的代码)所在的文件夹下有一个runs文件夹,runs文件夹下就是代码运行之后的记录
在这里插入图片描述
在这里插入图片描述

所以我们首先需要将cmd进入到项目所在的文件夹路径,然后输入命令行:

tensorboard --logdir=runs

此时会得到我们需要的数据图
在这里插入图片描述
在这里插入图片描述

如何在可视化的界面中写入数据

tb = SummaryWriter()

network = Network()
train_loader = torch.utils.data.DataLoader(train_set, batch_size=100)
images, labels = next(iter(train_loader))
grid = torchvision.utils.make_grid(images)

# 向tb中写入图片
tb.add_image('images', grid)
# 向tb中写入网络
tb.add_graph(network, images)
tb.close()

一次完整训练的全部代码和相应的可视化操作

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim

import itertools
from sklearn.metrics import confusion_matrix    # 生成混淆矩阵函数
import matplotlib.pyplot as plt
# from resources.plotcm import plot_confusion_matrix

import numpy as np
import torchvision
import torchvision.transforms as transforms
from torch.utils.tensorboard import SummaryWriter

torch.set_printoptions(linewidth=120)   # 这里告诉pytorch如何显示输出
torch.set_grad_enabled(True)  # 这里并不是必须的,默认情况下是打开的,pytorch的梯度跟踪功能

print(torch.__version__)
print(torchvision.__version__)

train_set = torchvision.datasets.FashionMNIST(
    root = './data/FashionMNIST',
    train = True,
    download = True,
    transform = transforms.Compose([
        transforms.ToTensor()
    ])
    )


class Network(nn.Module):
    def __init__(self):
        super(Network, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5)
        self.conv2 = nn.Conv2d(in_channels=6, out_channels=12, kernel_size=5)
        self.fc1 = nn.Linear(in_features=12 * 4 * 4, out_features=120)
        self.fc2 = nn.Linear(in_features=120, out_features=60)
        self.out = nn.Linear(in_features=60, out_features=10)

    def forward(self, t):
        # Input Layer
        t = t

        # Conv1
        t = F.relu(self.conv1(t))
        t = F.max_pool2d(t, kernel_size=2, stride=2)

        # Conv2
        t = F.relu(self.conv2(t))
        t = F.max_pool2d(t, kernel_size=2, stride=2)

        # FC1
        t = t.reshape(-1, 12 * 4 * 4)
        t = F.relu(self.fc1(t))

        # FC2
        t = F.relu(self.fc2(t))

        # Output
        t = self.out(t)
        return t

# 定义函数用于计算预测正确的数目
def get_num_correct(preds, labels):
    return preds.argmax(dim=
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值