首页 > 编程语言 >Python3,3分钟,带你了解PyTorch,原来科学计算库也不是很难嘛。

Python3,3分钟,带你了解PyTorch,原来科学计算库也不是很难嘛。

时间:2023-10-18 13:04:27浏览次数:31  
标签:nn 科学计算 self torch PyTorch 小鱼 屌丝 Python3


1、引言

小屌丝:鱼哥, 最近忙啥嘞?

小鱼:啥也没干。

小屌丝:确定 没干??

小鱼:… 这话到你嘴里,咋就变为了。

小屌丝:也没有啊, 我就是确认下,你干没干。

Python3,3分钟,带你了解PyTorch,原来科学计算库也不是很难嘛。_人工智能


小鱼:… 能干啥, 你想干啥 ?

小屌丝:我想请教你个问题。

小鱼:正儿八经的问题 ,是不?

小屌丝:你就看我今天这身穿的,还能不正经?

小鱼:穿新鞋走老路

小屌丝:此话咋讲?

小鱼:虚礼尽去

小屌丝:… 还整上词了。不管咋样,我还是要像你请教

小鱼:请教啥?

小屌丝:嘿嘿, 那鱼哥给我讲一讲 PyTorch呗

小鱼:麻雀讲家史、唐僧念紧箍咒、

小屌丝:这有咋讲?

小鱼:一言难尽。

小屌丝:那就慢慢讲, 又不着急

小鱼:…

Python3,3分钟,带你了解PyTorch,原来科学计算库也不是很难嘛。_损失函数_02

2、PyTorch

2.1 PyTroch介绍

PyTorch简介

PyTorch是一个基于Python的科学计算库,它使用Tensor作为核心数据结构,并提供了强大的张量计算功能。PyTorch是由Facebook人工智能研究院(FAIR)开发并维护的,旨在为机器学习和深度学习研究者提供一个灵活、易于使用且高性能的工具。

2.2 PyTorch 核心特点

PyTorch的核心特点包括:

  • 动态计算图:PyTorch使用动态计算图进行张量计算,这使得代码更加直观且易于调试。
  • 可变形数组:PyTorch的张量支持可变形,这意味着它们可以在运行时改变形状和大小,这对于某些深度学习算法来说非常有用。
  • 自动微分:PyTorch提供了自动微分功能,可以自动计算张量的梯度,这在深度学习中非常有用。
  • GPU加速:PyTorch支持GPU加速,可以在处理大规模数据时提高计算性能。
  • 丰富的API和扩展:PyTorch提供了丰富的API和扩展,可以方便地构建各种类型的神经网络模型。

2.3 PyTorch实例

2.3.1 安装

因为PyTorch是三方库,所以,要使用的话,需要安装,老规矩, 先pip 方式安装:

pip install torch torchvision torchaudio

其余安装方式,可以参照这两篇:

2.3.2 实例

  • 示例1:对张量进行常规操作
# 创建一个张量  
x = torch.tensor([1, 2, 3])  
print(x)  

# 对张量进行操作  
y = x + 1  
print(y)
  • 示例2:定义神经网络模型
# -*- coding:utf-8 -*-
# @Time   : 2023-09-25
# @Author : Carl_DJ

'''
实现功能:
    定义神经网络模型
'''
import torch.nn as nn  
import torch.optim as optim  
  
class Net(nn.Module):  
    def __init__(self):  
        super(Net, self).__init__()  
        self.fc1 = nn.Linear(3, 4)  
        self.fc2 = nn.Linear(4, 2)  
  
    def forward(self, x):  
        x = torch.relu(self.fc1(x))  
        x = self.fc2(x)  
        return x
  • 示例3:模型训练

创建模型实例并定义损失函数和优化器

# -*- coding:utf-8 -*-
# @Time   : 2023-09-25
# @Author : Carl_DJ

'''
实现功能:
    训练模型
'''

for i in range(100):  
    # 前向传播  
    inputs = torch.randn(1, 3)  
    labels = torch.randn(1, 2)  
    outputs = model(inputs)  
    loss = criterion(outputs, labels)  
      
    # 反向传播和优化  
    optimizer.zero_grad()  
    loss.backward()  
    optimizer.step()  
      
    # 输出损失值  
    print('Epoch {}, Loss: {:.4f}'.format(i, loss.item()))

当然,PyTorch还有其他的功能,这里我再写一个示例,让你加深对PyTorch的了解。

  • 示例4:分类手写数字
# -*- coding:utf-8 -*-
# @Time   : 2023-09-25
# @Author : Carl_DJ

'''
实现功能:
    实现分类手写数字
'''

import torch  
import torch.nn as nn  
import torch.optim as optim  
from torchvision import datasets, transforms  
  
# 定义数据预处理方法  
transform = transforms.Compose([  
    transforms.ToTensor(), # 将图像转换为张量  
    transforms.Normalize((0.1307,), (0.3081,)) # 对张量进行标准化  
])  
  
# 加载 MNIST 数据集  
train_dataset = datasets.MNIST('./data', train=True, download=True, transform=transform)  
test_dataset = datasets.MNIST('./data', train=False, download=True, transform=transform)  
  
# 定义数据加载器  
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)  
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=True)  
  
# 定义神经网络结构  
class Net(nn.Module):  
    def __init__(self):  
        super(Net, self).__init__()  
        self.fc1 = nn.Linear(28 * 28, 512)  
        self.fc2 = nn.Linear(512, 256)  
        self.fc3 = nn.Linear(256, 10)  
  
    def forward(self, x):  
        x = x.view(-1, 28 * 28)  
        x = torch.relu(self.fc1(x))  
        x = torch.relu(self.fc2(x))  
        x = self.fc3(x)  
        return x  
  
# 实例化神经网络和损失函数  
model = Net()  
criterion = nn.CrossEntropyLoss()  
  
# 选择优化算法和学习率  
optimizer = optim.SGD(model.parameters(), lr=0.01)  
  
# 训练神经网络  
for epoch in range(10):  
    running_loss = 0.0  
    for i, data in enumerate(train_loader, 0):  
        inputs, labels = data  
        optimizer.zero_grad() # 清空梯度缓存  
        outputs = model(inputs) # 前向传播  
        loss = criterion(outputs, labels) # 计算损失函数  
        loss.backward() # 反向传播  
        optimizer.step() # 更新权重  
        running_loss += loss.item() # 累加损失函数值  
    print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(train_loader)))  
  
# 测试神经网络  
correct = 0  
total = 0  
with torch.no_grad(): # 关闭梯度计算  
    for data in test_loader:  
        images, labels = data  
        outputs = model(images)  
        _, predicted = torch.max(outputs.data, 1)  
        total += labels.size(0)  
        correct += (predicted == labels).sum().item()  
print('Accuracy of the network on the test images: %d %%' % (100 * correct / total))

**小屌丝:**鱼哥,你给我解析一下,这段代码啊。
**小鱼:**这也需要解析? 我写的不够清楚啊?
小屌丝:不不不,已经够清楚了,只是我还想在继续了解一下
**小鱼:**看在你这么好学的份上,我就解析一下。

  • 解析
  • 首先、加载MNIST数据集并对数据进行预处理;
  • 其次、定义一个包含三个全连接层的神经网络,使用交叉熵损失函数来衡量网络的输出与标签之间的差距;
  • 第三、 使用随机梯度下降(SGD)算法训练神经网络;
  • 最后、测试网络的准确率。

小屌丝:奈斯。

Python3,3分钟,带你了解PyTorch,原来科学计算库也不是很难嘛。_损失函数_03

3、总结

看到这里,今天的分享差不多就该结束了。
当然,按照惯例,我们在回顾一下今天的内容:

  • PyTorch的基本概念
  • PyTorch的特点
  • 动态计算图
  • 可变形数组
  • 自动微分
  • GPU加速
  • 丰富的API和扩展
  • PyTorch的代码示例

在最后,小鱼再唠叨一句,在当前人工智能遍布各个行业的今天, 作为一名新生代农民工,多多少少都需要了解人工智能的知识。

我是小鱼

  • 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 51认证讲师等
  • 认证金牌面试官
  • 职场面试及培训规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,带你学习更多更专业更前言的人工智能相关技术。


标签:nn,科学计算,self,torch,PyTorch,小鱼,屌丝,Python3
From: https://blog.51cto.com/u_15910936/7916362

相关文章

  • Python3, 33行代码搞了一个聊天机器人, 这下再也不怕没人说话了。
    Python制作聊天机器人1、引言2、实战2.1准备2.2介绍2.2.1NLTK2.2.2ChatterBot2.3安装2.4示例2.4.1创建聊天机器人2.4.2与用户交互3、总结1、引言小屌丝:鱼哥,看这段代码fromchatterbotimportChatBot#创建聊天机器人chatbot=ChatBot('MyBot')#加载语料库with......
  • Python3,6行代码,搞定网络测速神器,我直接卸载某60测速器。
    6行代码搞定网络测速器1、引言2、代码实战2.1介绍2.1.1定义2.1.2常用方法2.1.3功能2.2安装2.3示例2.3.1测试上传下载速度2.3.2测试延迟2.3.3自定义服务器测试2.3.4多连接测试2.3.5实战3、总结1、引言小屌丝:鱼哥,你知道speedtest这个库吗?小鱼:嗯,知道一点点,咋了?小屌丝:那......
  • 《动手学深度学习 Pytorch版》 9.1 门控循环单元(GRU)
    我们可能会遇到这样的情况:早期观测值对预测所有未来观测值具有非常重要的意义。考虑一个极端情况,其中第一个观测值包含一个校验和,目标是在序列的末尾辨别校验和是否正确。在这种情况下,第一个词元的影响至关重要。我们希望有某些机制能够在一个记忆元里存储重要的早期信息。如......
  • pytorch问题集合
    根据kernelsize,stride和padding计算卷积后的尺寸对于PyTorch中的1维卷积层nn.Conv1d,输出序列长度可以根据以下公式计算:假设:-输入序列长度:L_in-卷积核大小:K-步长:S-填充:P则输出序列长度为:pythonL_out=(L_in+2*P-K)//S+1这里://表示地板除(向下......
  • [pytorch] 训练时冻结一部分模型的参数 —— module.requires_grad_(False)
    prologuetitle:[pytorch]训练时冻结一部分模型的参数——module.requires_grad_(False)代码用到一个解码器\(dec\),希望用它预测生成结果\(g\)的countingencode并用以计算损失,以此约束生成器生成合理的结果(能解码出正确的countingencode)但考虑到\(g\)并不准确,如果不冻结\(......
  • Python36days
    进程基础(操作系统中的概念)进程调度算法(四种算法)进程的并行和并发的概念同步异步阻塞非阻塞的概念创建进程(进程类Process)Process类的参数Process类的方法如何开启多进程基于TCP协议的高并发程序————————————————————————————————————......
  • 课程概论与python3语法
    server端云盘:代替硬盘disk,存图片,视频,几百G、几TMysql:存代码,文本,几十GRedis:占用内存, client端WebStorageds内存 1、注释#......
  • pytorch_Tensorboard的使用
     SummaryWriter()将什么写入文件中,如果不指定的话,就写入默认的需要两个方法writer.add_image()wruter.add_scalar() fromtorch.utils.tensorboardimportSummaryWriter#导入tensorboard,再导入SummaryWriter这个类writer=SummaryWriter("logs")#利用OpenC......
  • pytorch(9.7) keras-Embedding 嵌入层
    https://www.tensorflow.org/text/guide/word_embeddings将文本表示为数字机器学习模型将向量(数字数组)作为输入。处理文本时,您必须做的第一件事是想出一种策略,将字符串转换为数字(或“矢量化”文本),然后再将其输入模型。1独热编码作为第一个想法,您可能会对词汇表中的每个单词进......
  • pytorch官网方法安装报错 | 【解决方法】
    pytorch官网给出了两种安装方法condapytorch,去这里检查conda的pytorch的历史版本piptorch,去这里检查pip的torch的历史版本pytorch和torch的区别pip的torch集成了pytorch(cpu版的pytorch)和pytorch-cuda(GPU版的pytorch),所以只需要pipinstalltorch即可conda则是需要......