Pytorch笔记一则
安装Torch
pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install torchmetrics -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple
Torch与Numpy
np.array -> torch.tensor
np改为torch
import torchimport numpy as np
numpy与torch互转
tensor = torch.from_numpy(array) array = tensor.numpy()
np.reshape() vs torch.view()
axis -> dim
改变dtype:astype() -> to()
np.dot() -> np.matmul()
np.transpose() -> torch.permute()
np.split() vs torch.split()
启用GPU
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") cuda() cpu()
自动求梯度
a = torch.randint(0, 100, (3, 4, 5), dtype=torch.float, requires_grad=True) b = a ** 2c = b.sum() c.backward()#grad.zero_()#with torch.no_grad():a.grad
数据框架-DataLoader
from torch.utils.data import DataLoader,random_splitclass my_dataset(torch.utils.data.Dataset): def __init__(self, ): pass def __getitem__(self, index): pass def __len__(self): passtrain, test = random_split(my_dataset(), (1300, 158) ) data_loader = torch.utils.data.DataLoader(dataset=train,batch_size=2000, shuffle=True, num_workers=3) data_loader2 = torch.utils.data.DataLoader(dataset=test,batch_size=2000, shuffle=False, num_workers=3)
模型框架
import torch.nn as nnclass MyNet(nn.Module): def __init__(self): super(MyNet, self).__init__() def forward(self, x): return x model = MyNet()
训练框架
import torchmetrics lossf = nn.CrossEntropyLoss() #nn.MSELoss()optimizer = torch.optim.SGD(model.parameters(), lr=0.1) metricsf = torchmetrics.Accuracy(task='multiclass', num_classes=10) #torchmetrics.R2Score()for i in range(1): for batchX, batchY in data_loader: score = model(batchX) loss = lossf(score, batchY) loss.backward() optimizer.step() optimizer.zero_grad() metricsf(score, batchY) print(loss, metricsf.compute()) metricsf.reset() torch.save(model, 'model.pth')
测试框架
import torchmetrics metricsf = torchmetrics.Accuracy(task='multiclass', num_classes=10) #torchmetrics.R2Score()for batchX, batchY in data_loader: score = model(batchX) metricsf(score, batchY) print(loss, metricsf.compute())
高层API
#数值计算(激活函数等)torch.softmax() torch.sigmoid()
#loss functionnn.MSELoss() nn.BCELoss() 没做sigmiod nn.BCEWithLogitsLoss() 已经做了sigmiod nn.CrossEntropyLoss() loss.backward()
#优化器:随机梯度下降optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) torch.optim.SGD() torch.optim.Adam() optimizer.step() optimizer.zero_grad()
#评价指标import torchmetrics metrics = torchmetrics.Accuracy(task='multiclass', num_classes=num_classes) torchmetrics.R2Score() score = metrics(output, Y) metrics.reset() score = metrics.compute()
#保存与加载模型torch.save(model, file_name) torch.load(file_name)
学习率衰减
图片读取与增强
from torchvision.datasets import ImageFolderfrom torchvision.transforms import v2 v2_list = v2.Compose([ v2.ToTensor(), v2.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]), v2.Resize((224, 224)) ]) folder = ImageFolder('', transform=v2_list) img = v2_list(img)