Pytorch环境搭建与基本语法

1. Pytorch环境搭建

在开始使用Pytorch进行深度学习之前,首先需要进行环境搭建。Pytorch可以在Linux、Windows和Mac OS上运行,可以支持GPU和CPU操作。下面将介绍如何在Windows操作系统上进行Pytorch环境搭建。

1.1 安装Anaconda

首先需要安装Anaconda,可以从Anaconda官网下载合适版本进行安装。安装之后需要使用Anaconda命令行工具创建一个新的环境,这里以创建一个名为“pytorch_test”的环境为例。

conda create --name pytorch_test

1.2 安装Pytorch

在创建了新的环境之后,需要在新的环境中安装Pytorch。可以在Pytorch官网根据需要选择合适的安装版本,根据需要选择CPU版本或GPU版本。

conda install pytorch torchvision torchaudio -c pytorch

上述命令会自动安装与系统对应的Pytorch版本,安装完成后可以使用以下命令验证是否安装成功。

import torch

print(torch.__version__)

如果能够成功输出Pytorch的版本号,则说明安装成功。

2. Pytorch基本语法

了解了Pytorch的环境搭建之后,下面将介绍一些Pytorch基本语法。

2.1 张量(Tensor)

张量是Pytorch中的基本数据结构,类似于Numpy中的数组。可以使用如下代码定义一个张量。

import torch

x = torch.tensor([[1, 2], [3, 4]])

print(x)

上述代码会创建一个2x2的矩阵。

在进行深度学习操作时,经常需要进行张量的创建、操作和运算。可以使用如下代码创建一个随机张量。

x = torch.randn(2, 2)

print(x)

上述代码会创建一个2x2的随机矩阵。

2.2 自动求导(Autograd)

Pytorch中的自动求导功能可以大大简化代码编写过程。可以使用如下代码进行自动求导。

x = torch.randn(3, requires_grad=True)

y = x * 2

z = y.mean()

z.backward()

print(x.grad)

上述代码会在张量y上进行操作,并计算张量z的平均值。然后使用反向传播进行自动求导,并输出x的梯度。

2.3 线性回归

线性回归是使用Pytorch进行深度学习的最基本模型之一。可以使用如下代码进行线性回归模型的训练。

import torch.nn as nn

import torch.optim as optim

# 构建训练数据

x_train = torch.randn(100, 1) * 10

y_train = x_train + torch.randn(100, 1)

# 构建模型

model = nn.Linear(1, 1)

# 构建损失函数和优化器

criterion = nn.MSELoss()

optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练模型

for epoch in range(1000):

optimizer.zero_grad()

y_pred = model(x_train)

loss = criterion(y_pred, y_train)

loss.backward()

optimizer.step()

# 预测结果

x_test = torch.tensor([[2.0], [4.0], [6.0]])

y_test = model(x_test)

print(y_test)

上述代码会构建一个简单的线性回归模型并进行训练,最后输出预测结果。

2.4 神经网络(Neural Network)

指定网络的前向传递规则,然后系统会自动为我们构建后向传递规则并进行训练。可以使用如下代码定义一个简单的前向传递神经网络模型。

import torch.nn.functional as F

class Net(nn.Module):

def __init__(self):

super(Net, self).__init__()

self.fc1 = nn.Linear(1, 10)

self.fc2 = nn.Linear(10, 1)

def forward(self, x):

x = self.fc1(x)

x = F.relu(x)

x = self.fc2(x)

return x

# 构建训练数据和模型

x_train = torch.randn(100, 1)

y_train = x_train + torch.randn(100, 1)

model = Net()

# 构建损失函数和优化器

criterion = nn.MSELoss()

optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练模型

for epoch in range(1000):

optimizer.zero_grad()

y_pred = model(x_train)

loss = criterion(y_pred, y_train)

loss.backward()

optimizer.step()

# 预测结果

x_test = torch.tensor([[2.0], [4.0], [6.0]])

y_test = model(x_test)

print(y_test)

上述代码会构建一个简单的前向传递神经网络模型并进行训练,并输出预测结果。

2.5 卷积神经网络(Convolutional Neural Network)

卷积神经网络是用于图像识别的常用模型之一。可以使用如下代码定义一个简单的卷积神经网络模型。

class CNN(nn.Module):

def __init__(self):

super(CNN, self).__init__()

self.conv1 = nn.Conv2d(1, 10, kernel_size=5)

self.conv2 = nn.Conv2d(10, 20, kernel_size=5)

self.fc1 = nn.Linear(320, 50)

self.fc2 = nn.Linear(50, 10)

def forward(self, x):

x = F.relu(F.max_pool2d(self.conv1(x), 2))

x = F.relu(F.max_pool2d(self.conv2(x), 2))

x = x.view(-1, 320)

x = F.relu(self.fc1(x))

x = self.fc2(x)

return F.log_softmax(x, dim=1)

# 构建训练数据和模型

train_loader = torch.utils.data.DataLoader(

datasets.MNIST('../data', train=True, download=True,

transform=transforms.Compose([

transforms.ToTensor(),

transforms.Normalize((0.1307,), (0.3081,))

])),

batch_size=64, shuffle=True)

test_loader = torch.utils.data.DataLoader(

datasets.MNIST('../data', train=False, transform=transforms.Compose([

transforms.ToTensor(),

transforms.Normalize((0.1307,), (0.3081,))

])),

batch_size=1000, shuffle=True)

model = CNN()

# 构建损失函数和优化器

criterion = nn.CrossEntropyLoss()

optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练模型

for epoch in range(10):

for i, (data, target) in enumerate(train_loader):

optimizer.zero_grad()

output = model(data)

loss = criterion(output, target)

loss.backward()

optimizer.step()

# 测试模型

test_loss = 0

correct = 0

with torch.no_grad():

for data, target in test_loader:

output = model(data)

test_loss += criterion(output, target).item()

pred = output.argmax(dim=1, keepdim=True)

correct += pred.eq(target.view_as(pred)).sum().item()

test_loss /= len(test_loader.dataset)

accuracy = 100. * correct / len(test_loader.dataset)

print('Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(

test_loss, correct, len(test_loader.dataset), accuracy))

上述代码会构建一个简单的卷积神经网络模型并进行MNIST数据集的训练,并输出测试集的准确率。

后端开发标签