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在各个领域应用的github仓库合集

    这份合集列表中包含了与pytorch有关的各种教程,项目,库,视频,文章,书籍等等,可谓是极其丰富了。 表单数据 教程 可视化 可解释性 物体检测 长拖尾 / Out-of-Distribution Recognition 基于能量的学习 缺失数据 架构搜索 优化 量化 量子机器学习 神经网络压缩 面部,行为和姿势识别 超分辨率 Synthetesizing…

    PyTorch 2023年4月8日
    00
  • linux中anaconda环境下pytorch的安装(conda安装本地包)

    跑代码的时候遇到和这位博主几乎一模一样的问题,安装的也是同一版本。目前清华源已经停止服务,如果要自己下载pytorch包的话估计只能在官网下载了。 原文:https://blog.csdn.net/summer2day/article/details/88652934 pytorch的安装(1)版本查看查看cuda版本cat /usr/local/cuda/…

    PyTorch 2023年4月8日
    00
  • 利用Pytorch实现ResNet34网络

    利用Pytorch实现ResNet网络主要是为了学习Pytorch构建神经网络的基本方法,参考自«深度学习框架Pytorch:入门与实践»一书,作者陈云 1.什么是ResNet网络 ResNet(Deep Residual Network)深度残差网络,是由Kaiming He等人提出的一种新的卷积神经网络结构,其最重要的特点就是网络大部分是由如图一所示的残…

    2023年4月8日
    00
  • pytorch tensor的索引与切片

    tensor索引与numpy类似,支持冒号,和数字直接索引 import torch a = torch.Tensor(2, 3, 4) a # 输出: tensor([[[9.2755e-39, 1.0561e-38, 9.7347e-39, 1.1112e-38], [1.0194e-38, 8.4490e-39, 1.0102e-38, 9.0919e…

    PyTorch 2023年4月8日
    00
  • PyTorch——(8) 正则化、动量、学习率、Dropout、BatchNorm

    @ 目录 正则化 L-1正则化实现 L-2正则化 动量 学习率衰减 当loss不在下降时的学习率衰减 固定循环的学习率衰减 Dropout Batch Norm L-1正则化实现 PyTorch没有L-1正则化,所以用下面的方法自己实现 L-2正则化 一般用L-2正则化weight_decay 表示\(\lambda\) 动量 moment参数设置上式中的\…

    2023年4月8日
    00
  • 详解Pytorch如何利用yaml定义卷积网络

    在PyTorch中,我们可以使用YAML文件来定义卷积神经网络。YAML是一种轻量级的数据序列化格式,它可以方便地定义复杂的数据结构。本文将介绍如何使用YAML文件来定义卷积神经网络,并提供两个示例。 安装PyYAML 在使用YAML文件定义卷积神经网络之前,我们需要安装PyYAML库。可以使用以下命令来安装PyYAML: pip install pyyam…

    PyTorch 2023年5月15日
    00
  • 深度学习之PyTorch实战(4)——迁移学习

      (这篇博客其实很早之前就写过了,就是自己对当前学习pytorch的一个教程学习做了一个学习笔记,一直未发现,今天整理一下,发出来与前面基础形成连载,方便初学者看,但是可能部分pytorch和torchvision的API接口已经更新了,导致部分代码会产生报错,但是其思想还是可以借鉴的。 因为其中内容相对比较简单,而且目前其实torchvision中已经存…

    2023年4月5日
    00
  • 浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式

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

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