基于Pytorch和tensorboard实现深度神经网络训练及可视化的例子

22 篇文章 0 订阅
18 篇文章 1 订阅

最近在学习pytorch实现深度神经网络的教程,强推deeplizard的系列教程,有能力的可以自己去搜索一下原地址,有详细的文字教案和每个part的测试题。虽然是全英文教程但以我托福听力18分的水平(哭了)也全程听完了,另外在优兔上面还可以按快捷键C开启自动字幕,不过这个自动字幕吧感觉开了还不如不开emmm,总之强烈推荐,真的讲的特别好!
B站链接:https://www.bilibili.com/video/av78848066

以下是一个简单的基于pytorch和tensorboard实现深度神经网络训练及数据可视化的栗子:
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

import numpy as np
import matplotlib.pyplot as plt

torch.set_printoptions(linewidth=120)
torch.set_grad_enabled(True)

from torch.utils.tensorboard import SummaryWriter

batch_size = 100
lr = 0.01

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):
        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 = F.relu(self.fc1(t.reshape(-1,12*4*4)))
        t = F.relu(self.fc2(t))
        
        t = self.out(t)
        return t

def get_num_correct(preds,labels):
    return preds.argmax(dim=1).eq(labels).sum().item()

net = Network()
comment = f'batchsize={batch_size},lr={lr}'
tb = SummaryWriter(comment=comment)

data_loader = torch.utils.data.DataLoader(train_set,batch_size=batch_size)
images,labels = next(iter(data_loader))
grid = torchvision.utils.make_grid(images)
tb.add_images('images',grid.unsqueeze(dim=0))
tb.add_graph(net,images)

optimizer = optim.Adam(net.parameters(),lr=lr)
for epoch in range(5):
    total_correct = 0
    total_loss = 0
    for batch in data_loader:
        images,labels = batch
        preds = net(images)
        loss = F.cross_entropy(preds,labels)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        num_correct = get_num_correct(preds,labels)
        total_correct += num_correct
        total_loss += loss.item()
        accuracy = total_correct/len(train_set)

    tb.add_scalar('loss',total_loss,epoch)
    tb.add_scalar('accuracy',accuracy,epoch)
    print(f'epoch:{epoch},total_correct:{total_correct},total_loss:{total_loss},accuracy:{accuracy}')
print('done.')
tb.close()
需要说明的两点:
  1. 这里使用的dataset是改良版的MNIST:FashionMNIST。我们知道原来的MNIST是一个数字手写体0-9的一个数据库,labels一共有10个,其中train_set有6w个,test_set有1w个。后来出现的FashionMNIST和MNIST基本是一样的,不过内容从简单的手写体变成了衣服/裤子/鞋子。使用torch自带的torchvision.datasets.FashionMNIST函数就可以直接从网上下载下来。

  2. tensorboard是tensorflow的一个很强大的可视化工具,能很方便的出图(论文就靠你了。。),现在只要版本在1.1.0以上的pytorch也可以使用tensorboard。

    查看自己pytorch版本的方法:

    import torch
    print(torch.__version__)
    

    下载tensorboard:

    pip install tensorboard -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    这里为了下载的更快些,使用了清华的镜像源。

    引入tensorboard的格式:

    from torch.utils.tensorboard import SummaryWriter
    

    tensorboard读取文件的默认地址是./runs,在程序里面可以往里面写net, images, loss, accuracy以及net的所有参数。具体实现我上面的程序有部分,更详细地也可以自行百度或者去我发的最上面那个网址里面找讲的教程。

    程序跑完过后,在终端里面输入:

    tensorboard --logdir=runs
    

    然后就会告诉你tensorboard现在运行的server地址,默认的是:

    localhost:6006
    

    随便打开一个浏览器,输入这个地址,就可以看到tensorboard的运行情况啦(如图)
    在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值