M1 mac安装PyTorch的实现步骤

M1 Mac是苹果公司推出的基于ARM架构的芯片,与传统的x86架构有所不同。因此,在M1 Mac上安装PyTorch需要一些特殊的步骤。本文将介绍M1 Mac上安装PyTorch的实现步骤,并提供两个示例说明。

步骤一:安装Miniforge

Miniforge是一个轻量级的Anaconda发行版,专门为ARM架构的Mac电脑设计。我们可以使用Miniforge来安装Python和PyTorch。以下是安装Miniforge的步骤:

  1. 访问Miniforge的官方网站:https://github.com/conda-forge/miniforge/releases/latest
  2. 下载适用于M1 Mac的Miniforge安装包(例如Miniforge3-MacOSX-arm64.sh
  3. 打开终端,并在终端中导航到Miniforge安装包所在的目录
  4. 运行以下命令来安装Miniforge:
bash Miniforge3-MacOSX-arm64.sh
  1. 按照提示进行安装,包括选择安装路径和添加Miniforge到环境变量中

步骤二:创建虚拟环境并安装PyTorch

在安装Miniforge后,我们需要创建一个虚拟环境,并在其中安装PyTorch。以下是创建虚拟环境并安装PyTorch的步骤:

  1. 打开终端,并运行以下命令来创建一个名为pytorch的虚拟环境:
conda create --name pytorch python=3.8
  1. 激活虚拟环境:
conda activate pytorch
  1. 安装PyTorch:
conda install pytorch torchvision torchaudio -c pytorch -c conda-forge
  1. 验证PyTorch是否安装成功:
python -c "import torch; print(torch.__version__)"

如果输出了PyTorch的版本号,则说明安装成功。

示例一:使用PyTorch进行图像分类

以下是一个使用PyTorch进行图像分类的示例,我们将使用在M1 Mac上安装的PyTorch:

import torch
import torchvision
import torchvision.transforms as transforms

# 加载数据集
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)

# 定义模型
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()

# 定义损失函数和优化器
import torch.optim as optim

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

# 训练模型
for epoch in range(2):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 2000 == 1999:
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

print('Finished Training')

在上述代码中,我们使用PyTorch训练了一个简单的卷积神经网络,用于对CIFAR-10数据集中的图像进行分类。

示例二:使用PyTorch进行文本分类

以下是一个使用PyTorch进行文本分类的示例,我们将使用在M1 Mac上安装的PyTorch:

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchtext.datasets import AG_NEWS
from torchtext.data.utils import get_tokenizer
from torchtext.vocab import build_vocab_from_iterator

# 加载数据集
train_iter = AG_NEWS(split='train')
tokenizer = get_tokenizer('basic_english')
vocab = build_vocab_from_iterator(map(tokenizer, train_iter), specials=["<unk>"])
train_iter = AG_NEWS(split='train', vocab=vocab, tokenizer=tokenizer)

# 定义模型
class TextSentiment(nn.Module):
    def __init__(self, vocab_size, embed_dim, num_class):
        super().__init__()
        self.embedding = nn.EmbeddingBag(vocab_size, embed_dim, sparse=True)
        self.fc = nn.Linear(embed_dim, num_class)
        self.init_weights()

    def init_weights(self):
        initrange = 0.5
        self.embedding.weight.data.uniform_(-initrange, initrange)
        self.fc.weight.data.uniform_(-initrange, initrange)
        self.fc.bias.data.zero_()

    def forward(self, text, offsets):
        embedded = self.embedding(text, offsets)
        return self.fc(embedded)

# 训练模型
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
num_class = len(train_iter.get_labels())
vocab_size = len(train_iter.get_vocab())
emsize = 64
model = TextSentiment(vocab_size, emsize, num_class).to(device)
criterion = torch.nn.CrossEntropyLoss().to(device)
optimizer = torch.optim.SGD(model.parameters(), lr=4.0)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, 1, gamma=0.9)

def train(train_iter):
    model.train()
    total_loss = 0.
    total_acc = 0.
    for idx, (text, offsets) in enumerate(train_iter):
        optimizer.zero_grad()
        text, offsets = text.to(device), offsets.to(device)
        output = model(text, offsets)
        loss = criterion(output, train_iter.get_labels()[idx])
        total_loss += loss.item()
        loss.backward()
        torch.nn.utils.clip_grad_norm_(model.parameters(), 0.5)
        optimizer.step()
        total_acc += (output.argmax(1) == train_iter.get_labels()[idx]).sum().item()
    return total_loss / len(train_iter), total_acc / len(train_iter)

for epoch in range(5):
    train_loss, train_acc = train(train_iter)
    print(f'Epoch: {epoch+1:02}')
    print(f'\tTrain Loss: {train_loss:.3f} | Train Acc: {train_acc*100:.2f}%')
    scheduler.step()

print('Finished Training')

在上述代码中,我们使用PyTorch训练了一个简单的文本分类模型,用于对AG_NEWS数据集中的新闻进行分类。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:M1 mac安装PyTorch的实现步骤 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式

    在PyTorch中,我们可以使用不同的文件格式来保存模型,包括.pt、.pth和.pkl。这些文件格式之间有一些区别,本文将对它们进行详细讲解,并提供两个示例说明。 .pt和.pth文件 .pt和.pth文件是PyTorch中最常用的模型保存格式。它们都是二进制文件,可以保存模型的参数、状态和结构。.pt文件通常用于保存单个模型,而.pth文件通常用于保存多…

    PyTorch 2023年5月16日
    00
  • pytorch(二十一):交叉验证

    一、K折交叉验证 将训练集分成K份,一份做验证集,其他做测试集。这K份都有机会做验证集             二、代码 1 import torch 2 import torch.nn as nn 3 import torchvision 4 from torchvision import datasets,transforms 5 from torch.…

    PyTorch 2023年4月7日
    00
  • pytorch 更改预训练模型网络结构的方法

    在PyTorch中,我们可以使用预训练模型来加速模型训练和提高模型性能。但是,有时候我们需要更改预训练模型的网络结构以适应我们的任务需求。以下是使用PyTorch更改预训练模型网络结构的完整攻略,包括两个示例说明。 1. 更改预训练模型的全连接层 以下是使用PyTorch更改预训练模型的全连接层的步骤: 导入必要的库 python import torch …

    PyTorch 2023年5月15日
    00
  • Pytorch nn.Unfold() 与 nn.Fold()图码详解(最新推荐)

    以下是PyTorch中nn.Unfold()与nn.Fold()函数的详细攻略,包含两个示例说明。 简介 在PyTorch中,nn.Unfold()和nn.Fold()函数是用于对张量进行展开和折叠操作的函数。本文将介绍如何使用这两个函数来进行张量的展开和折叠操作。 示例1:使用nn.Unfold()函数对张量进行展开操作 在这个示例中,我们将使用nn.Un…

    PyTorch 2023年5月15日
    00
  • unbuntu 16.04 MS-Celeb-1M + alexnet + pytorch

    最近被保研的事情搞的头大,拖了半天才勉强算结束这个了。从熟悉unbantu 16.04的环境(搭个FQ的梯子都搞了一上午 呸!)到搭建python,pytorch环境。然后花了一个上午熟悉py的基本语法就开始强撸了,具体的过程等保研结束了再补吧,贴个代码意思一下先。 数据集用的是清洗过的MS-Celeb-1M(em…怎么清洗的之后再补吧) python用…

    PyTorch 2023年4月8日
    00
  • Pytorch学习笔记之tensorboard

    训练模型过程中,经常需要追踪一些性能指标的变化情况,以便了解模型的实时动态,例如:回归任务中的MSE、分类任务中的Accuracy、生成对抗网络中的图片、网络模型结构可视化…… 除了追踪外,我们还希望能够将这些指标以动态图表的形式可视化显示出来。 TensorFlow的附加工具Tensorboard就完美的提供了这些功能。不过现在经过Pytorch团队的努力…

    2023年4月8日
    00
  • pytorch中修改后的模型如何加载预训练模型

    问题描述 简单来说,比如你要加载一个vgg16模型,但是你自己需要的网络结构并不是原本的vgg16网络,可能你删掉某些层,可能你改掉某些层,这时你去加载预训练模型,就会报错,错误原因就是你的模型和原本的模型不匹配。   此时有两种解决方法: 1、重新解析参数的字典,将预训练模型的参数提取出来,然后放在自己的模型中对应的位置 2、直接用原本的vgg16网络去加…

    PyTorch 2023年4月6日
    00
  • pytorch 分布式训练

    pytorch 分布式训练 参考文献 https://pytorch.org/tutorials/intermediate/dist_tuto.html代码https://github.com/overfitover/pytorch-distributed欢迎来star me. demo import os import torch import torch…

    PyTorch 2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部