当前位置:首页 > python > 正文内容

PyTorch基础入门教程

zhangsir3个月前 (06-26)python52

一、PyTorch简介

PyTorch是一个基于Python的科学计算包,主要用途包括NumPy的替代品(以使用GPU和其他加速器的强大功能)以及一个用于实现神经网络的自动微分库。它具有动态计算图的特点,可以根据计算需要实时改变计算图,与TensorFlow的静态计算图不同。由于其简洁性和符合Python风格的特点,PyTorch在机器学习领域得到了广泛应用。

二、安装PyTorch

在开始使用PyTorch之前,需要先进行安装。以下是安装PyTorch的基本步骤:

  1. 安装Conda:访问Conda官网,根据你的操作系统选择合适的安装包进行下载和安装。

  2. 创建Conda环境:在Anaconda Prompt中输入命令创建一个新的Conda环境,例如conda create -n pytorch python=3.9

  3. 激活环境:使用命令conda activate pytorch激活新创建的环境。

  4. 安装PyTorch:在激活的Conda环境中,根据PyTorch官网的指导,选择合适的安装命令进行安装,例如conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia

  5. 检验安装:进入Python环境,导入PyTorch并检验CUDA可用性,例如import torchtorch.cuda.is_available()

三、Tensor基础操作

Tensor(张量)是PyTorch中的基本操作对象,可以理解为NumPy中的ndarray。以下是Tensor的一些基础操作:

1. 创建Tensor

Tensor可以通过多种方式创建,包括直接从数据创建、从NumPy数组创建、从另一个Tensor创建,以及指定特定值或随机创建。

import torch
import numpy as np

# 直接从数据创建
data = [[1, 2], [3, 4]]
x_data = torch.tensor(data)

# 从NumPy数组创建
np_array = np.array(data)
x_np = torch.from_numpy(np_array)

# 从另一个Tensor创建
x_ones = torch.ones_like(x_data)
x_rand = torch.rand_like(x_data, dtype=torch.float)

# 指定特定值或随机创建
shape = (2, 3)
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)

2. Tensor的属性

可以通过.shape().size()方法来获取Tensor的形状;通过.dtype()来查看其中存放的数据类型;通过.device()方法来查看运算所处于的设备。

pythontensor = torch.rand(3, 4)print(f"Shape of tensor: {tensor.shape}")print(f"Datatype of tensor: {tensor.dtype}")print(f"Device tensor is stored on: {tensor.device}")

3. Tensor的运算

Tensor支持多种运算,包括索引和切片、张量的连接、算数操作(如加法)、矩阵乘法以及元素级乘法等。

tensor = torch.rand(3, 4)
print(f"Shape of tensor: {tensor.shape}")
print(f"Datatype of tensor: {tensor.dtype}")
print(f"Device tensor is stored on: {tensor.device}")

四、自动微分(Autograd)

PyTorch的自动微分机制使得反向传播求梯度变得非常简单。通过设置requires_grad=True,可以使得Tensor在参与计算时自动记录梯度信息。

pythonx = torch.tensor(2.0, requires_grad=True)y = x ** 2y.backward()  # 反向传播求梯度print(x.grad)  # 输出梯度值

五、数据加载(DataLoader)

PyTorch通过Dataset和DataLoader进行构建数据管道。Dataset用于封装数据集,而DataLoader则用于将数据集分批加载到模型中进行训练。

# 索引和切片
tensor = torch.ones(4, 4)
print(f"First row: {tensor[0]}")
print(f"First column: {tensor[:, 0]}")
print(f"Last column: {tensor[..., -1]}")
tensor[:, 1] = 0
print(tensor)

# 张量的连接
t1 = torch.cat([tensor, tensor, tensor], dim=1)
print(t1)

# 算数操作(以加法为例)
t = torch.randn(4, 4)
print(tensor)
print(t)
print(tensor + t)  # 直接相加
print(torch.add(tensor, t))  # 使用add
result = torch.empty(4, 4)
torch.add(tensor, t, out=result)  # 指定输出到result中
print(result)
t.add_(tensor)  # inplace操作
print(t)

# 矩阵乘法
y1 = tensor @ tensor.T  # tensor.T 是 tensor 的转置
y3 = torch.rand_like(y1)
torch.matmul(tensor, tensor.T, out=y3)

# 元素级乘法
# 计算 tensor 的元素级乘积,即每个位置上的元素相乘

六、模型构建与训练

在PyTorch中,可以通过继承Module类来构造模型。以下是一个简单的模型构建和训练示例:

import torch.nn as nn
import torch.optim as optim

# 定义模型
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(3, 1)  # 输入特征3,输出特征1

    def forward(self, x):
        return self.fc(x)

# 初始化模型、损失函数和优化器
model = SimpleModel()
criterion = nn.MSELoss()  # 均方误差损失函数
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降优化器

# 训练模型
for epoch in range(100):
    for batch_data, batch_labels in dataloader:
        # 前向传播
        outputs = model(batch_data)
        loss = criterion(outputs, batch_labels.float())  # 假设标签是浮点数

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    print(f'Epoch {epoch+1}, Loss: {loss.item()}')

七、结语

通过本文的学习,你已经掌握了PyTorch的基础知识,包括Tensor的创建和操作、自动微分机制、数据加载以及模型构建和训练等。希望这些内容能够帮助你快速入门PyTorch,并开启你的深度学习之旅。


zhangsir版权h8防采集https://mianka.xyz

扫描二维码推送至手机访问。

版权声明:本文由zhangsir or zhangmaam发布,如需转载请注明出处。

本文链接:https://www.mianka.xyz/post/184.html

分享给朋友:

“PyTorch基础入门教程” 的相关文章

python之seleniumwire获取network(网络)信息

python之seleniumwire获取请求头参数import time from seleniumwire import webdriver # 创建Chrome驱动程序的新实例 driver = webdriver...

python 实现彩色图转素描图

python可以把彩色图片转化为铅笔素描草图,对人像、景色都有很好的效果。而且只需几行代码就可以一键生成,适合批量操作,非常的快捷。需要的第三方库:Opencv - 计算机视觉工具,可以实现多元化的图像视频处理,有Python接口""" Photo ...

python 将json数据转成csv文件

从JSON数据转化CSV文件下面的这个Python脚本能够将JSON数据转化到CSV文件的表格当中去,我们输入的是带有.json后缀的文件,输出的是.csv后缀的表格文件,代码如下import json def converter(input_file, output...

计算机学习视频教程

人工智能机器学习:Python&R实践课程介绍:https://www.aihorizon.cn/1百度网盘地址: https://pan.baidu.com/s/1a743NTKFRjsgexMTagWooA?pwd=e39j动手使用Python进行自然语言处理(NLP)课程介绍:http...

python 多线程与多进程的代码实例

一.两者区别多进程和多线程的主要区别是:线程是进程的子集(部分),一个进程可能由多个线程组成。多进程的数据是分开的、共享复杂,需要用IPC;但同步简单。多线程共享进程数据,共享简单;但同步复杂。(1)多进程进程是程序在计算机上的一次执行活动,即正在运行中的应用程序,通常称为进程。当你运行一个程序,你...

Linux系统下使用Python+selenium+谷歌浏览器下载文件

from seleniumwire import webdriver import time ch_options = webdriver.ChromeOptions() ch_options.add_argument("-...