Pytorch笔记一则

作者20251个月前 (03-06)Pytorch18

安装Torch

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)