程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2020-03-11 19:55     阅读(1894)     评论(0)     点赞(28)     收藏(4)


最近在学习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的运行情况啦(如图)
    在这里插入图片描述



所属网站分类: 技术文章 > 博客

作者:32738ew

链接:https://www.pythonheidong.com/blog/article/252507/f3efbaf17746fbdeb1df/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)