您的位置:

动手学深度学习 PyTorch

一、基本介绍

深度学习是对人工神经网络的发展与应用。在人工神经网络中,神经元通过接受输入来生成输出。深度学习通常使用很多层神经元来构建模型,这样可以处理更加复杂的问题。PyTorch是一个深度学习框架,它提供了丰富的功能和易用的API,它以优秀的张量库为基础,提供充分丰富且易用的数据结构和操作接口。

二、安装和环境搭建

安装和环境搭建是开发深度学习应用的必要准备工作。PyTorch可以支持多种平台,可以在Windows,Linux和MacOS上工作。从官网pytorch.org中可以下载发行版本或者从源码构建。安装完PyTorch后,可以使用Anaconda或者普通的python解释器来创建Python环境,用来管理更加复杂的依赖项。

import torch
print(torch.__version__)

if torch.cuda.is_available():
    device = torch.device("cuda") 
    print('Using GPU')
else: 
    device = torch.device("cpu")
    print('Using CPU')

三、基本操作

PyTorch提供了许多张量操作,比如加法,乘法,合并,转置等等。张量是PyTorch中最基础的类型,代表了多维数组。使用张量,可以进行数字运算和线性代数操作,并且可以右击以获取想要的特殊性质。

import torch

a = torch.tensor([[1., 2.], [3., 4.]])
b = torch.tensor([[5., 6.], [7., 8.]])
c = torch.tensor([[9., 10.], [11., 12.]])

print(torch.add(a, b))
print(torch.matmul(a, b))
print(torch.transpose(a, 0, 1))

四、神经网络

神经网络是深度学习的基本架构,在PyTorch中使用张量和自动微分来实现。PyTorch中的神经网络可以用于图像识别,语音处理,自然语言处理等其他领域。PyTorch可以构建简单的神经网络和复杂的卷积神经网络,因此成为了许多实例化机器学习应用程序的首选。

import torch.nn as nn
import torch.optim as optim
import torch.utils.data as data

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.fc = nn.Linear(320, 10)

    def forward(self, x):
        x = nn.functional.relu(nn.functional.max_pool2d(self.conv1(x), 2))
        x = nn.functional.relu(nn.functional.max_pool2d(self.conv2(x), 2))
        x = x.view(-1, 320)
        x = self.fc(x)
        return nn.functional.log_softmax(x, dim=1)

net = Net()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
criterion = nn.CrossEntropyLoss()

loader = data.DataLoader(trainset, batch_size=64,
                          shuffle=True, num_workers=4)

for epoch in range(10):
    running_loss = 0.0
    for i, data in enumerate(loader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        if i % 200 == 199: 
            print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 200))
            running_loss = 0.0

五、模型的保存和加载

在模型训练完成后,可以保存模型并随时加载模型在测试数据集上进行验证和预测。在PyTorch中,可以使用torch.save()和torch.load()来保存和加载模型的参数。当重新加载模型参数时,需要确保模型构建完全相同,否则模型可能会执行不正确。在实际使用中,可以使用模型的子类化或使用预训练模型来构建模型,以便提高结果质量。

import torch.nn as nn
import torch.optim as optim
import torch.utils.data as data

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.fc = nn.Linear(320, 10)

    def forward(self, x):
        x = nn.functional.relu(nn.functional.max_pool2d(self.conv1(x), 2))
        x = nn.functional.relu(nn.functional.max_pool2d(self.conv2(x), 2))
        x = x.view(-1, 320)
        x = self.fc(x)
        return nn.functional.log_softmax(x, dim=1)

net = Net()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
criterion = nn.CrossEntropyLoss()

# Save model
torch.save(net.state_dict(), 'model.pth')

# Load model
model = Net()
model.load_state_dict(torch.load('model.pth'))

六、总结

PyTorch是一个功能强大且易用的深度学习框架,它可以帮助开发者在短时间内实现深度学习应用。基本操作,神经网络和模型的保存和加载是PyTorch中的重要部分。