【PyTorch】PyTorch、Cuda 的安装和使用

原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。


文章目录

  • 前言
  • 一、Anaconda 中安装 PyTorch 和 CUDA
  • 二、检查PyTorch和CUDA版本
  • 三、PyTorch的基本使用
  • 四、PyTorch调用cuda
  • 五、Matplotlib绘制Pytorch损失函数和准确率
  • 六、tesorbrand显示图像
  • 七、用Pytorch写一个卷积神经网络
  • 八、用Pytorch写一个目标检测模型


前言

PyTorch是一个开源的Python深度学习框架,可以用于构建各种类型的神经网络模型。

一、Anaconda 中安装 PyTorch 和 CUDA

  1. 首先下载并安装适用于您系统的 Anaconda 版本。

  2. 打开 Anaconda Prompt 或命令行工具,并创建一个名为“pytorch”或任何其他您喜欢的环境,此处假设您使用的是 Anaconda 4.5 或更高版本:

conda create -n pytorch python=3.7 anaconda
  1. 激活新环境:
conda activate pytorch
  1. 安装 PyTorch:
conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c nvidia

此命令将安装适用于 CUDA 11.1 的 PyTorch 和 TorchVision,以及适用于 CUDA 11.1 的 CUDA 工具包。

  1. 验证 PyTorch 安装是否成功:
python -c "import torch; print(torch.__version__)"

如果成功安装,这将打印 PyTorch 的版本号。

二、检查PyTorch和CUDA版本

可以使用以下命令:

import torchprint(torch.__version__)
print(torch.version.cuda)

这将打印出您正在使用的PyTorch和CUDA版本。

三、PyTorch的基本使用

示例

PyTorch是一个开源的Python深度学习框架,可以用于构建各种类型的神经网络模型。要使用PyTorch,您需要首先安装它。可以使用以下命令在终端中安装PyTorch:

pip install torch

然后,您可以在Python脚本中导入PyTorch并开始使用它。例如,要构建一个简单的全连接神经网络,可以使用以下代码:

import torch
import torch.nn as nn# Define the neural network model
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(784, 256)self.fc2 = nn.Linear(256, 10)def forward(self, x):x = x.view(-1, 784)x = torch.relu(self.fc1(x))x = self.fc2(x)return x# Instantiate the model and define the loss function and optimizer
net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.01)# Load the data and train the model
for epoch in range(10):for i, (inputs, labels) in enumerate(train_loader, 0):optimizer.zero_grad()outputs = net(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()# Evaluate the trained model on the test set
correct = 0
total = 0
with torch.no_grad():for inputs, labels in test_loader:outputs = net(inputs)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()
print('Accuracy: %d %%' % (100 * correct / total))

在这个例子中,我们定义了一个简单的全连接神经网络,使用MNIST数据集进行训练和测试。我们使用PyTorch内置的nn.Module类来定义神经网络模型,并在forward方法中定义正向传播的操作。我们使用交叉熵损失函数和随机梯度下降(SGD)优化器来训练模型。我们使用训练数据集中的数据来更新模型参数,并使用测试数据集来评估模型的准确性。

四、PyTorch调用cuda

在PyTorch中使用CUDA可以大大加速训练和推理过程。以下是使用CUDA的几个步骤:

  1. 检查CUDA是否可用:
import torchif torch.cuda.is_available():device = torch.device("cuda")          # 如果GPU可用,则使用CUDA
else:device = torch.device("cpu")           # 如果GPU不可用,则使用CPU
  1. 将模型和数据加载到CUDA设备:
model.to(device)
inputs, labels = inputs.to(device), labels.to(device)
  1. 将数据转换为CUDA张量:
inputs = inputs.cuda()
labels = labels.cuda()
  1. 在训练过程中,使用CUDA加速计算:
for inputs, labels in dataloader:inputs, labels = inputs.to(device), labels.to(device)optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()

请注意,在使用CUDA时,您需要确保您的计算机具有兼容的GPU和正确的CUDA和cuDNN版本。您可以在PyTorch的官方文档中找到更多详细信息。

五、Matplotlib绘制Pytorch损失函数和准确率

在Pytorch中,我们可以使用Matplotlib来绘制训练过程中的损失函数曲线、准确率曲线等。下面是一个简单的示例:

import matplotlib.pyplot as plt# 定义损失函数和准确率列表
train_losses = [0.1, 0.08, 0.05, 0.03, 0.02]
train_accs = [90, 92, 95, 97, 98]# 绘制损失函数曲线
plt.plot(train_losses, label='Train Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.show()# 绘制准确率曲线
plt.plot(train_accs, label='Train Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

运行后会分别显示训练过程中的损失函数曲线和准确率曲线。我们可以根据自己的需要调整图表的样式和参数,例如修改线条颜色、线条宽度、坐标轴范围等。

六、tesorbrand显示图像

PyTorch下的Tensorboard 使用

七、用Pytorch写一个卷积神经网络

下面是一个简单的卷积神经网络(CNN)的实现,用PyTorch框架来训练MNIST手写数字识别数据集。

首先,您需要导入所需的库和模块,如下所示:

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
from torchvision import datasets, transforms

接下来,您需要定义网络的架构。这个CNN有两个卷积层,一个最大池化层和两个全连接层。代码如下:

class Net(nn.Module):def __init__(self):super(Net, self).__init__()# 输入为28*28*1self.conv1 = nn.Conv2d(1, 10, kernel_size=5)# 输入为24*24*10self.conv2 = nn.Conv2d(10, 20, kernel_size=5)# 输入为20*20*20self.mp = nn.MaxPool2d(2)# 输入为10*10*20self.fc1 = nn.Linear(320, 50)self.fc2 = nn.Linear(50, 10)def forward(self, x):x = F.relu(self.mp(self.conv1(x)))x = F.relu(self.mp(self.conv2(x)))x = x.view(-1, 320)x = F.relu(self.fc1(x))x = self.fc2(x)return F.log_softmax(x, dim=1)

现在,您需要定义训练函数和测试函数。训练函数将会用来训练模型,而测试函数将会用来测试模型。代码如下:

def train(model, device, train_loader, optimizer, epoch):model.train()for batch_idx, (data, target) in enumerate(train_loader):data, target = data.to(device), target.to(device)optimizer.zero_grad()output = model(data)loss = F.nll_loss(output, target)loss.backward()optimizer.step()if batch_idx % 100 == 0:print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(epoch, batch_idx * len(data), len(train_loader.dataset),100. * batch_idx / len(train_loader), loss.item()))def test(model, device, test_loader):model.eval()test_loss = 0correct = 0with torch.no_grad():for data, target in test_loader:data, target = data.to(device), target.to(device)output = model(data)test_loss += F.nll_loss(output, target, reduction='sum').item()pred = output.argmax(dim=1, keepdim=True)correct += pred.eq(target.view_as(pred)).sum().item()test_loss /= len(test_loader.dataset)print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(test_loss, correct, len(test_loader.dataset),100. * correct / len(test_loader.dataset)))

接下来,您需要加载数据集和定义训练和测试参数。代码如下:

batch_size = 64train_transforms = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))
])test_transforms = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))
])train_dataset = datasets.MNIST('./data', train=True, download=True, transform=train_transforms)
test_dataset = datasets.MNIST('./data', train=False, transform=test_transforms)train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=batch_size, shuffle=False)use_cuda = torch.cuda.is_available()
device = torch.device("cuda" if use_cuda else "cpu")model = Net().to(device)
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

最后,您需要在循环中训练和测试模型。代码如下:

epochs = 10for epoch in range(1, epochs + 1):train(model, device, train_loader, optimizer, epoch)test(model, device, test_loader)

这是一个简单的CNN的实现,用PyTorch训练MNIST数据集。您可以调整模型的超参数,例如学习率、动量等,来提高模型的准确性和性能。

八、用Pytorch写一个目标检测模型

下面是一个基于PyTorch的目标检测模型的实现,使用Faster R-CNN网络,并使用COCO数据集进行训练和测试。

首先,您需要导入所需的库和模块,如下所示:

import torch
import torchvision
import torchvision.transforms as transforms
import torch.utils.data
import numpy as np
import matplotlib.pyplot as plt
import time
import os
import json
import torch.utils.data as data
from torchvision.datasets import CocoDetection
import torchvision.transforms.functional as F
import torch.nn as nn
import torch.optim as optim
from torchvision.models.detection import FasterRCNN
from torchvision.models.detection.rpn import AnchorGenerator
from torchvision.models.detection.backbone_utils import resnet_fpn_backbone
from torchvision.ops import MultiScaleRoIAlign

接下来,您需要定义数据转换和数据集类,以加载和预处理COCO数据集。代码如下:

class Compose(object):def __init__(self, transforms):self.transforms = transformsdef __call__(self, img, target):for t in self.transforms:img, target = t(img, target)return img, targetclass RandomHorizontalFlip(object):def __init__(self, probability=0.5):self.probability = probabilitydef __call__(self, img, target):if np.random.rand() < self.probability:img = F.hflip(img)target["boxes"][:, [0, 2]] = img.width - target["boxes"][:, [2, 0]]return img, targetclass Resize(object):def __init__(self, max_size=900, min_size=600):self.max_size = max_sizeself.min_size = min_sizedef __call__(self, img, target):w, h = img.sizesize = self.min_sizeif w < h and max(h, w * size / w) <= self.max_size:size = int(w * size / w)elif max(h, w * size / h) <= self.max_size:size = int(h * size / h)img = F.resize(img, (size, size))target["boxes"][:, :4] *= size / self.min_sizereturn img, targetclass ToTensor(object):def __call__(self, img, target):img = F.to_tensor(img)return img, targetclass COCODataset(data.Dataset):def __init__(self, data_dir, set_name='train', transform=None):super().__init__()self.data_dir = data_dirself.images_dir = os.path.join(data_dir, set_name)self.set_name = set_nameself.transform = transformself.coco = CocoDetection(self.images_dir, os.path.join(data_dir, f'{set_name}.json'))def __getitem__(self, index):image, target = self.coco[index]image_id = self.coco.ids[index]if self.transform is not None:image, target = self.transform(image, target)return image, target, image_iddef __len__(self):return len(self.coco)

接下来,您需要定义模型的架构。这个Faster R-CNN网络使用ResNet-50 FPN作为骨干网络。代码如下:

class FasterRCNNResNetFPN(nn.Module):def __init__(self, num_classes):super(FasterRCNNResNetFPN, self).__init__()self.num_classes = num_classesbackbone = resnet_fpn_backbone('resnet50', pretrained=True)anchor_generator = AnchorGenerator(sizes=((32, 64, 128, 256, 512),),aspect_ratios=((0.5, 1.0, 2.0),))roi_pooler = MultiScaleRoIAlign(featmap_names=['0', '1', '2', '3'],output_size=7,sampling_ratio=2)self.model = FasterRCNN(backbone,num_classes=num_classes + 1,rpn_anchor_generator=anchor_generator,box_roi_pool=roi_pooler)def forward(self, x, targets=None):if self.training and targets is None:raise ValueError("In training mode, targets should be passed")elif not self.training and targets is not None:raise ValueError("In inference mode, targets should not be passed")else:return self.model(x, targets)

现在,您需要设置训练和测试的超参数并进行模型训练。代码如下:

batch_size = 2
num_workers = 2
num_epochs = 10data_dir = '/path/to/coco'train_transforms = Compose([Resize(min_size=600, max_size=900),RandomHorizontalFlip(),ToTensor()])
test_transforms = Compose([Resize(min_size=800, max_size=1333),ToTensor()])train_dataset = COCODataset(data_dir, set_name='train', transform=train_transforms)
test_dataset = COCODataset(data_dir, set_name='val', transform=test_transforms)train_loader = data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=num_workers, collate_fn=lambda x: tuple(zip(*x)))
test_loader = data.DataLoader(test_dataset, batch_size=batch_size, shuffle=False, num_workers=num_workers, collate_fn=lambda x: tuple(zip(*x)))num_classes = 80device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')model = FasterRCNNResNetFPN(num_classes=num_classes).to(device)optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9, weight_decay=0.0005)def train_one_epoch(model, optimizer, data_loader, device, epoch):model.train()train_loss = 0.0start_time = time.time()for step, (images, targets, image_ids) in enumerate(data_loader):images = [img.to(device) for img in images]targets = [{k: v.to(device) for k, v in t.items()} for t in targets]loss_dict = model(images, targets)losses = sum(loss_dict.values())train_loss += losses.item()optimizer.zero_grad()losses.backward()optimizer.step()if step % 10 == 0:print(f'Epoch: [{epoch}/{num_epochs}] Step: [{step}/{len(data_loader)}] Loss: {losses.item()}')train_loss /= len(data_loader)end_time = time.time()print(f'Training Loss: {train_loss} Time: {end_time - start_time}')def evaluate(model, data_loader, device):model.eval()results = []for images, targets, image_ids in data_loader:images = [img.to(device) for img in images]targets = [{k: v.to(device) for k, v in t.items()} for t in targets]with torch.no_grad():outputs = model(images)for i, (output, target) in enumerate(zip(outputs, targets)):result = {'image_id': image_ids[i],'boxes': output['boxes'].detach().cpu().numpy(),'scores': output['scores'].detach().cpu().numpy(),'labels': output['labels'].detach().cpu().numpy(),}target = {'image_id': image_ids[i],'boxes': target['boxes'].cpu().numpy(),'labels': target['labels'].cpu().numpy(),}results.append((result, target))return resultsfor epoch in range(num_epochs):train_one_epoch(model, optimizer, train_loader, device, epoch)results = evaluate(model, test_loader, device)

这是一个使用PyTorch实现的目标检测模型的示例,使用Faster R-CNN网络和COCO数据集进行训练和测试。您可以根据需要调整模型的超参数,以提高模型的准确性和性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SOLIDWORKS软件如何批量加图号

当我们在做模型设计时&#xff0c;不管是新研发还是改型设计&#xff0c;都需要规范模型的属性信息&#xff0c;其中必不可少的就是图号或代号。但是一套产品是由很多个零件组成的&#xff0c;每个零件的属性都需要去规范&#xff0c;一个一个改其实工作量也不小&#xff0c;今…

替代LT8711龙讯替代RTD2172 CS5265中文规格书4K60HZ转接线 设计Type-C转HDMI2.0高清投屏方案

龙迅LT8711是一款Type-C/DP1.2 to HDMI2.0方案芯片&#xff0c;北京集睿致远&#xff08;ASL&#xff09;推出的CS5265可以完全代替LT8711UX&#xff0c;封装尺寸比LT8711UX小的同时&#xff0c;CS5265的芯片集成度高&#xff0c;内置MCU&#xff0c;内置lLDO等&#xff0c;CS5…

C++ 性能优化

要系统地提升C项目的性能&#xff0c;可以采取以下步骤&#xff1a; 分析和度量&#xff1a;首先&#xff0c;你需要通过性能分析工具来确定项目中的性能瓶颈。使用工具如gprof、perf等&#xff0c;来识别代码中消耗时间和资源最多的部分。 选择合适的数据结构和算法&#xff…

【数据库】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函数实现去重查询

在PostgreSQL中&#xff0c;我们可以使用SELECT DISTINCT和SUBSTRING函数来实现对某个字段进行去重查询。本文将介绍如何使用这两个函数来实现对resource_version字段的去重查询。 1. SELECT DISTINCT语句 SELECT DISTINCT语句用于从表中选择不重复的记录。如果没有指定列名&…

JS实现IOS标准时间(JSON时间格式)格式转yyyy-mm-dd格式

JS实现IOS时间格式转yyyy-mm-dd格式 /*** IOS时间格式转yyyy-mm-dd格式*param iosDate [IOS时间格式]*return {string} [yyyy-mm-dd]**/ const convertIOSDateFormat (iosDate) > {if(!iosDate) {return -;}const date new Date(iosDate);const year date.getFullYear()…

以vue2为例,用npm开发环境在后端部署vue2项目(更推荐使用nginx部署)

因为之前一致出现的跨域问题&#xff0c;从而想到了这个办法&#xff0c;属于偏方。推荐使用nginx部署&#xff0c;再去解决跨域问题。 首先将你的前端vue项目拷贝一份到服务器&#xff0c;准备一个dockerfile文件&#xff0c;用这个进行部署首先你得前提是配置好了vue.config…

【react】react生命周期钩子函数:

文章目录 一、生命周期概念:二、生命周期:三、挂载阶段&#xff08;constructor > render > componentDidMount&#xff09;&#xff1a;四、更新阶段&#xff08;render > componentDidUpdate&#xff09;&#xff1a;五、卸载阶段&#xff08;componentWillUnmount …

css实现卡片的左上角有一个三角形的遮盖效果

需求: 卡片的左上角有一个绿色的三角形标签,用来区分状态 实现: .vCard{position: relative;overflow: hidden; } .vCard::before {content: "";position: absolute;top: 0;left: 0;width: 0;height: 0;border-bottom: 20px solid transparent;border-left: 20px …

HarmonyOS应用开发者基础与高级认证题库——中级篇

系列文章目录 HarmonyOS应用开发者基础与高级认证题库——基础篇 HarmonyOS应用开发者基础与高级认证题库——中级篇 文章目录 系列文章目录前言一、判断二、单选三、多选 前言 今天刚换了台果子手机就收到了华子鸿蒙开发认证邀请&#xff08;认证链接&#xff09;&#xff0…

Mac 创建和删除 Automator 工作流程,设置 Terminal 快捷键

1. 创建 Automator 流程 本文以创建一个快捷键启动 Terminal 的自动操作为示例。 点击打开 自动操作&#xff1b; 点击 新建文稿 点击 快速操作 选择 运行 AppleScript 填入以下内容 保存名为 “Open Terminal” 打开 设置 > 键盘&#xff0c;选择 键盘快捷键 以此选择 服…

ElasticsSearch基础概念和安装

ElasticSearch基础概念以及可视化界面安装 文章目录 ElasticSearch基础概念以及可视化界面安装1、引言2、基本概念3、倒排索引机制3.1、倒排索引 4、使用docker安装ElasticSearch4.1、下载镜像文件4.2 、创建实例,启动es 5.安装Kibana 1、引言 Elastic 的底层是开源库 Lucene。…

Docker DCT

DOCKER_CONTENT_TRUST 如何使用Docker Content Trust为容器确保安全&#xff1f;-51CTO.COM

大规模向量检索库Faiss学习总结记录

因为最近要使用到faiss来做检索和查询&#xff0c;所以这里只好抽出点时间来学习下&#xff0c;本文主要是自己最近学习的记录&#xff0c;来源于网络资料查询总结&#xff0c;仅用作个人学习总结记录。 Faiss的全称是Facebook AI Similarity Search&#xff0c;是FaceBook的A…

CRM系统哪些功能可以个性化定制?

不同的企业有着不同的业务流程和需求&#xff0c;因此在选型时就需要一款可以个性化定制的CRM系统。下面说说可以个性化定制的CRM系统的功能和优势。 如何实现个性化定制&#xff1f; Zoho CRM支持个性化定制&#xff0c;您可以创建自定义功能模块、字段以及业务流程&#xf…

Grafana集成prometheus(3.Grafana添加promethus数据)

添加数据库 选择Connections -> Datasources&#xff0c;点击Add New data source&#xff0c;填写Promitheus Server Url,点击 save & test完成配置 添加DashBorad 选择prometheus数据库选择code填入对应的查询公式(监控公式参考Prometheus监控公式)修改面板名称Ti…

NodeJS vmvm2沙箱逃逸

文章目录 NodeJS vm&vm2沙箱逃逸什么是沙箱&#xff1f;NodeJS的作用域exports是将文件元素输出的接口global全局对象 vm沙箱模块vm.runInThisContext(code)vm.createContext([sandbox])vm.runInContext(code,contextifiedSandbox[,options])vm.runInNewContext(code[,sand…

深度学习训练营之CGAN生成手势图像

深度学习训练营之CGAN生成手势 原文链接CGAN简单介绍环境介绍前置工作数据导入所需的包加载数据创建数据集查看数据集 模型设置初始化模型的权重定义生成器构造判别器 模型训练定义损失函数设置超参数正式开始训练 结果可视化 原文链接 &#x1f368; 本文为&#x1f517;365天…

怎样选择适合的爬虫ip服务商?

在当今数字化的时代&#xff0c;越来越多的企业和个人需要采集和分析大量的数据来进行市场调研、竞品分析、舆情监测等工作。而为了保护其数据和资源&#xff0c;很多网站采取了反爬虫措施&#xff0c;限制了普通用户和爬虫程序的访问。为了应对这种限制&#xff0c;许多人开始…

websocket服务端大报文发送连接自动断开分析

概述 当前springboot版本&#xff1a;2.7.4 使用依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>现象概述&#xff1a; 客户端和服务端已经有心跳…

Collections工具类(java)

文章目录 7.1 常用方法 参考操作数组的工具类&#xff1a;Arrays&#xff0c;Collections 是一个操作 Set、List 和 Map 等集合的工具类。 7.1 常用方法 Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作&#xff0c;还提供了对集合对象设置不可变、…