【超详细】Pytorch 入门教程(一)

本文是Pytorch入门教程的第一部分,介绍了Pytorch的基本概念和功能,包括作为Numpy替代者和深度学习平台的角色。文章详细讲解了Pytorch中张量的操作,如创建、初始化、类型指定,以及基本的加法运算和形状变换。还探讨了Torch Tensor与Numpy array之间的相互转换,并强调了它们共享内存的特点。最后,提到了Tensor在不同设备间移动的方法。
摘要由CSDN通过智能技术生成

1 认识Pytorch

在这里插入图片描述
什么是Pytorch?

  • Pytorch是一个基于Numpy的科学计算包, 向它的使用者提供了两大功能.
    • 作为Numpy的替代者, 向用户提供使用GPU强大功能的能力.
    • 做为一款深度学习的平台, 向用户提供最大的灵活性和速度.

2 Pytorch的基本元素操作

  • Tensors张量: 张量的概念类似于Numpy中的ndarray数据结构, 最大的区别在于Tensor可以利用GPU的加速功能.
  • 我们使用Pytorch的时候, 常规步骤是先将torch引用进来, 如下所示:
from __future__ import print_function
import torch
好的,这里是一个PyTorch入门代码教程,涵盖了PyTorch的基础知识和实践应用。 首先介绍PyTorch的基础知识,包括张量和自动微分。PyTorch中的张量类似于NumPy中的数组,可以支持GPU加速计算和自动微分。自动微分是PyTorch的一个重要功能,它可以自动计算函数的导数,使得神经网络的反向传播算法变得非常简单。 下面是一个简单的PyTorch张量和自动微分的示例: ``` import torch # 创建张量 x = torch.tensor([[1., 2.], [3., 4.], [5., 6.]]) y = torch.tensor([[2.], [4.], [6.]]) # 自动微分 x.requires_grad_() y.requires_grad_() z = x * y w = z.sum() w.backward() # 输出梯度 print(x.grad) print(y.grad) ``` 以上代码创建了两个张量x和y,并将它们设置为需要计算梯度。然后通过乘法和求和操作得到了一个新的张量z,最后对它进行反向传播计算梯度。输出结果为x和y的梯度。 接着介绍PyTorch的实践应用,包括模型定义、数据处理和训练过程。下面是一个简单的PyTorch模型训练的示例,使用MNIST手写数字分类数据集进行训练。 ``` import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 定义参数 batch_size = 64 learning_rate = 0.01 num_epochs = 10 # 数据预处理 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) # 加载数据集 train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True) test_dataset = datasets.MNIST(root='./data', train=False, transform=transform, download=True) test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=batch_size, shuffle=False) # 定义模型 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(784, 256) self.fc2 = nn.Linear(256, 128) self.fc3 = nn.Linear(128, 10) def forward(self, x): x = x.view(-1, 784) x = torch.relu(self.fc1(x)) x = torch.relu(self.fc2(x)) x = self.fc3(x) return x model = Net() # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=learning_rate) # 训练模型 for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): # 前向传播 outputs = model(images) loss = criterion(outputs, labels) # 反向传播 optimizer.zero_grad() loss.backward() optimizer.step() if (i+1) % 100 == 0: print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}' .format(epoch+1, num_epochs, i+1, len(train_loader), loss.item())) # 测试模型 model.eval() with torch.no_grad(): correct = 0 total = 0 for images, labels in test_loader: outputs = model(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print('Accuracy of the network on the 10000 test images: {} %'.format(100 * correct / total)) ``` 以上代码定义了一个三层全连接神经网络模型,使用交叉熵损失函数和随机梯度下降优化器进行训练。在训练过程中,对模型进行了前向传播和反向传播,最后测试了模型的准确率。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chaser&upper

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值