PyTorch入门实战教程笔记(十六):神经网络与全连接层3

PyTorch入门实战教程笔记(十六):神经网络与全连接层3

GPU/CPU运行切换

在训练网路时,采用GPU进行加速,pytorch提供了一个功能,能够一条语句切换在CPU、GPU上运算,如果在GPU上运行,device = torch.device( ‘cuda:0’ ), (后面的0是cuda的编号),如果在CPU上运行,将‘cuda’改成‘GPU’即可。对net搬到GPU上去,使用net = MLP().to(device), 将loss也使用.to(device)搬到GPU上去。详细如下图示例,最后一行的target.cuda()的意思也是讲数据搬到GPU上去,但是不推荐,最好使用 .to(device),能够一行语句切换在GPU/CPU上运行。此外,.to(device)对于net返回的是一样的,对data是不一样的,一个是在CPU上面,一个是在GPU上面,两个不同的tensor。
在这里插入图片描述

测试

前面已经讲解了train相关的,网络训练可能效果很好,但是可能泛化能力差,导致测试精度低,loss不会下降,所以需要test来看网络的性能精度。先回顾一下之前讲过的argmax(dim=1),该函数会返回该维度dim=1的最大值的索引号。因为softmax不会改变数据的大小关系,所以不管对logits数据还是经过softmax的pred数据进行argmax,效果是一样的。shape为[4,10],在dim=1的维度上,返回shape为[4],为dim=1维度上的索引号,下图我们得到为([9,5,9,4,])。我们假设真实的label为(9,3,2,4), 使用torch.eq(pred_label, label)函数,来计算正确的数量,pred_label, label如果相同位置数据相同会返回1,不同会返回0。然后使用sum()函数将其累加,得到准确的个数,通过float()转换为FloatTensor, 再通过item()转换为Numpy的值,以上计算结果除以总数据量,即可得到精度准确率accuracy。
在这里插入图片描述
test实例,在前面train完一个epoch后,开始做测试,通过for语句来将test_loader上加载数据集data,然后送给net(),里面去,test_loss 计不计算都可,然后对logits做一个argmax,然后进行累加的计算,在除以总的数据集的长度,就可得到精度。
在这里插入图片描述
test代码:

test_loss = 0
    correct = 0
    for data, target in test_loader:
        data = data.view(-1, 28 * 28)
        data, target = data.to(device), target.cuda()
        logits = net(data)
        test_loss += criteon(logits, target).item()

        pred = logits.argmax(dim=1)
        correct += pred.eq(target).float().sum().item()

    test_loss /= len(test_loader.dataset)
    print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
        test_loss, correct, len(test_loader.dataset),
        100. * correct / len(test_loader.dataset)))

Visdom可视化

visdom用于调试可视化的工具,可以随意布局,可以查看图片,曲线,直方图,等高线等等,且可以同时监听多个。在cmd界面安装visdom:

pip install visdom

安装之后,开启一个监听的进程,(visdom本质上是一个外部的服务器,开启外部服务器之后,向外部服务器丢数据,该服务器将数据渲染到网页上去)。
然后输入一下命令:

python -m visdom.server

在这里插入图片描述
安装完成后,将连接复制,打开浏览器。

创建一个visdom的实例,viz,然后传参数,Y,X,win=’…’, 相当于窗口中的ID,title将窗口名字命名为train_loss,.然后第二行将loss数据传进去,global_step为时间戳,update=‘append’,添加到曲线之后。代码及效果如下:
在这里插入图片描述
在这里插入图片描述
多个曲线绘制:其中legend为每条曲线的名称,其余操作一样,代码及效果如下:
在这里插入图片描述
在这里插入图片描述
对于绘制图片的效果,代码及效果:
在这里插入图片描述
在这里插入图片描述
整个网页展示:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值