一文详解PyTorch环境搭建:M芯Mac通过pip安装PyTorch开发环境

对于希望在本地环境中进行深度学习开发的开发者来说,配置PyTorch工具是至关重要的一步。。对于Mac用户而言,搭建PyTorch开发环境并不复杂,本文将详细介绍如何在Mac电脑上使用pip安装PyTorch开发环境,帮助开发者快速上手深度学习开发。

一、准备工作

在开始之前,请确保您的Mac系统中已安装以下软件,并确保Python版本至少为3.9版本

  • Python:建议安装较高版本的Python3。
  • pip:Python的包管理器,用于安装OpenCV库。

可以在终端,输入以下命令检查Python和pip的版本:

// 查看python版本
python3 --version
// 查看pip3版本
pip3 --version

在终端输入which python3 查看安装位置:

// 查看python安装位置
which python3
// 查看pip3安装位置
which pip3

如果您的Python3版本较低(低于3.9),请先升级Python3版本。

查看python版本

二、安装PyTorch

在M芯 Mac 电脑上安装 PyTorch 可以通过以下步骤完成,这里我使用的是 pip 安装方式。

2.1 安装PyTorch

访问 PyTorch官方网站,根据您的 Mac 系统参数选择适合的PyTorch版本。在页面最下方,可以看到pip的安装链接。

PyTorch官方下载地址:
https://pytorch.org/get-started/locally/

安装Python

安装前,请确认已安装python3和pip3。然后在终端直接输入pip3 install torch torchvision torchaudio命令,进行torch安装。

torch安装

2.2 验证PyTorch

安装完成后,创建一个torch_demo.py文件,写入如下两行代码并运行,验证PyTorch是否安装成功。

# 导入PyTorch库
import torch
# 创建一个5行3列的随机张量(tensor)
x = torch.rand(5, 3)
# 打印随机张量(tensor)
print(x)

终端命令行,执行python3 torch_demo.py运行程序,若正常输出版本信息,则tensor相关信息,则表明安装成功。

验证Python

三、使用M芯GPU训练模型

M芯Mac电脑,使用PyTorch深度学习框架,通过M芯片集成的GPU设备,训练一个简单的线性回归模型。模型网络结构如下:
网络模型

实现源码如下:

import torch

# 检查 MPS 是否可用(我的本地硬件环境:mac电脑M芯片,支持GPU运算)
print(f"MPS available: {torch.backends.mps.is_available()}")
# 设置PyTorch的计算设备(Device)。优先使用Apple Metal Performance Shaders (MPS) 进行GPU加速,否则回退到CPU计算
device_mps = torch.device("mps" if torch.backends.mps.is_available() else "cpu")
print(f"Using device: {device_mps}")

# ---------- 准备训练数据 ----------
# x_data 和 y_data 是两个张量(Tensor),分别代表"输入数据"和对应的"标签数据"。
# x_data 包含了数值 [1.0, 2.0, 3.0],而 y_data 包含了 [2.0, 4.0, 6.0],这表明 y_data 中的每个值都是对应 x_data 值的两倍。
# 我们的目标是训练一个模型,使其能够学习到这种输入与输出之间的映射关系。
x_data = torch.Tensor([[1.0], [2.0], [3.0]]).to(device_mps)  # 迁移到gpu
y_data = torch.Tensor([[2.0], [4.0], [6.0]]).to(device_mps)  # 迁移到gpu


# ---------- 定义模型 ----------
# 定义一个名为 LinearModel 的类,该类继承自 torch.nn.Module
class MultiLayerLinearModel(torch.nn.Module):
    def __init__(self):
        super(MultiLayerLinearModel, self).__init__()
        # 添加一个隐藏层,输入1个特征,输出3个特征
        self.hidden = torch.nn.Linear(1, 3)
        # 添加一个输出层,输入3个特征,输出1个特征
        self.output = torch.nn.Linear(3, 1)

    # 定义如何通过模型进行前向传播。
    def forward(self, x):
        # 通过隐藏层(激活函数可以使用ReLU或其他激活函数)
        x = torch.relu(self.hidden(x))
        # 通过输出层
        y_pred = self.output(x)
        return y_pred


# ---------- 创建模型实例 ----------
# 创建一个 MultiLayerLinearModel 类的实例
# model = MultiLayerLinearModel().to("mps")
model = MultiLayerLinearModel().to(device_mps)

# 均方误差损失函数:torch.nn.MSELoss 计算预测值和真实值之间的均方误差;
criterion = torch.nn.MSELoss(reduction='sum')

# 随机梯度下降优化器:torch.optim.SGD 随机梯度下降优化器,通过沿着梯度方向更新参数来最小化损失函数。
# model.parameters() 获取模型的所有可学习参数。LinearModel 中定义了一个线性层,其有两个参数"权重weight"、"偏置bias"。model.parameters()返回这两个参数。
# lr=0.01 学习率(Learning Rate),决定了每次参数更新的步长大小。
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# ---------- 训练模型 ----------
# 在 for 循环中迭代执行 1000 次训练周期(epoch)
for epoch in range(1000):
    # 计算模型对 x_data 的预测 y_pred
    y_pred = model(x_data)
    # 计算损失 loss,即 y_pred 与实际标签 y_data 之间的差异
    loss = criterion(y_pred, y_data)
    # 打印当前的 epoch 数和损失值
    print(epoch, loss.item())
    # 清空梯度缓存:
    # 在PyTorch中,梯度是通过反向传播计算出来的。
    # 当调用 loss.backward() 时,PyTorch会自动计算损失函数关于模型参数的梯度,并将这些梯度存储在每个参数的.grad 属性中。
    # 如果不显式地清零梯度,那么每次调用loss.backward()都会将新计算出的梯度加上上次计算的结果,导致梯度不正确。
    optimizer.zero_grad()
    # 反向传播计算梯度
    loss.backward()
    # 在完成一次反向传播计算梯度之后,根据这些梯度更新模型的参数。利用优化器中定义的更新规则,来调整模型的权重和偏置,以期减少损失函数的值。
    optimizer.step()
#
# 打印模型参数
print('Hidden layer:')
print('w = ', model.hidden.weight)
print('b = ', model.hidden.bias)
print('Output layer:')
print('w = ', model.output.weight)
print('b = ', model.output.bias)

# 测试模型
x_test = torch.Tensor([[4.0]]).to(device_mps)     # 迁移到gpu
y_test = model(x_test)
print('y_pred = ', y_test.data)

模型的训练参数预测结果输出:

Hidden layer:
w =  Parameter containing:tensor([[0.1732],[1.4368],[-0.9307]], requires_grad=True)
b =  Parameter containing:tensor([ 0.0400, -0.1946,  0.5237], requires_grad=True)
Output layer:
w =  Parameter containing:tensor([[0.0159, 1.3901, 0.5729]], requires_grad=True)
b =  Parameter containing:tensor([0.2699], requires_grad=True)
y_pred =  tensor([[8.0000]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bjxiaxueliang

您的鼓励是我创作的最大动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值