本系列博客,目的是快速上手训练和修改开源的pytorch模型,以用促学,主要解决以下问题:
1.怎么在GPU上运算;
2.怎么把不需要的运算排除计算图;
3.怎么定义dataset、dataloader;
4.怎么保存模型,加载模型,继续训练;
5.怎么计算准确率;
6.怎么可视化loss、准确率的变化曲线;
7.矩阵平行计算parallel;
一 总述
GPU上计算比CPU上计算快多了,使用GPU训练能快速看看模型的效果
pytorch怎么使用GPU?什么能使用GPU?什么时候用GPU、什么时候用CPU?
- 可以放到GPU上的,要么是tensor,要么是模型;
- GPU上的张量和CPU上的张量进行计算会报错;
- GPU上张量使用pytorch的tensor操作得到的张量,都自动放到GPU上;
- 模型放到GPU上,模型的成员变量都会自动放到GPU上;成员方法中创建的tensor不会自动放到GPU;
- 与list对比,tensor有些操作不能进行:这些不能进行的操作肯定是转为list在cpu上进行,如:tensor不能进行append操作;
二 实现
2.1 放到GPU上的方法
tensor放到cuda有两种操作,第二种更好:
方法一:直接转到GPU
model.cuda()
方法二:先判断GPU可用,如果可用转到GPU,不可用使用CPU
device = 'cuda' if torch.cuda.is_available() else 'cpu'
mode.to(device)
2.2 放到GPU上的问题
这个实现是参照的网上一个博客,源博客链接忘了
import torch
import torch.nn as nn
import copy
class MyClass(nn.Module):
def __init__(self, para1, para2):
super(MyClass, self).__init__()
self.attr1 = para1
self.attr2 = para2
##定义函数
self.func1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
self.func2 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, padding=1