首页 > 编程语言 >Python实战:PyTorch入门

Python实战:PyTorch入门

时间:2024-03-22 10:58:34浏览次数:36  
标签:__ dim 入门 nn Python self torch PyTorch

一、引言

深度学习是近年来人工智能领域的热点之一,其在图像识别、语音识别、自然语言处理等领域取得了显著的成果。Python作为一门流行的编程语言,拥有丰富的深度学习框架,其中PyTorch是近年来备受关注的一个。本文将详细介绍PyTorch的基本概念、安装方法、基础知识以及实战项目的应用,帮助我们快速入门并掌握这个强大的深度学习框架。

二、PyTorch简介与安装

PyTorch是一个由Facebook开源的深度学习框架,它提供了灵活、动态的计算图,使得模型构建和调试更加直观和简单。PyTorch支持多种深度学习算法,如卷积神经网络(CNN)、循环神经网络(RNN)等,并且可以轻松地在CPU和GPU上进行训练。
安装PyTorch非常简单,可以使用pip命令进行安装:

pip install torch torchvision

三、PyTorch基础知识

3.1 张量(Tensors)
PyTorch中的核心数据结构是张量(Tensor),它类似于NumPy的ndarray,但可以在GPU上加速计算。下面是一些创建张量的示例:

import torch
# 创建一个未初始化的5x3矩阵
x = torch.empty(5, 3)
# 创建一个随机初始化的5x3矩阵
x = torch.rand(5, 3)
# 创建一个填充0且数据类型为long的5x3矩阵
x = torch.zeros(5, 3, dtype=torch.long)

3.2 自动求导(Autograd)
PyTorch提供了自动求导机制,可以自动计算梯度。在PyTorch中,所有张量都有一个.requires_grad属性,当设置为True时,将会记录对于该张量的所有操作,以便自动计算梯度。下面是一个使用自动求导的示例:

x = torch.tensor([1., 2., 3.], requires_grad=True)
y = torch.tensor([4., 5., 6.], requires_grad=True)
z = x + y
# 计算梯度
z.backward()
# 查看梯度
print(x.grad)  # 输出梯度tensor([1., 1., 1.])
print(y.grad)  # 输出梯度tensor([1., 1., 1.])

3.3 模型构建(Model Building)
在PyTorch中,模型通常是一个自定义的类,继承自torch.nn.Module。下面是一个简单的线性回归模型示例:

import torch.nn as nn
import torch.nn.functional as F
class LinearRegressionModel(nn.Module):
    def __init__(self, input_dim, output_dim):
        super(LinearRegressionModel, self).__init__()
        self.linear = nn.Linear(input_dim, output_dim)
    def forward(self, x):
        return self.linear(x)
# 创建模型实例
model = LinearRegressionModel(input_dim=1, output_dim=1)

四、PyTorch实战项目

4.1 项目一:手写数字识别
下面是一个使用PyTorch构建卷积神经网络(CNN)进行手写数字识别的示例:

import torch.optim as optim
# 加载数据集
train_loader = torch.utils.data.DataLoader(datasets.MNIST(...), batch_size=64, shuffle=True)
# 定义模型
class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Conv2d(1, 16, kernel_size=3, padding=1)
        self.fc1 = nn.Linear(16*28*28, 10)
    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = x.view(-1, 16*28*28)
        x = self.fc1(x)
        return x
# 创建模型实例
model = CNN()
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 训练模型
num_epochs = 5
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        # 前向传播
        outputs = model(images)
        loss = criterion(outputs, labels)
        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        if (i+1) % 100 == 0:
            print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item():.4f}')

4.2 项目二:情感分析
下面是一个使用PyTorch构建循环神经网络(RNN)进行情感分析的示例:

import torch.optim as optim
# 加载数据集
train_loader = torch.utils.data.DataLoader(SentimentDataset(...), batch_size=64, shuffle=True)
# 定义模型
class RNN(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super(RNN, self).__init__()
        self.rnn = nn.RNN(input_dim, hidden_dim)
        self.fc = nn.Linear(hidden_dim, output_dim)
    def forward(self, x):
        x, _ = self.rnn(x)
        x = self.fc(x[-1])
        return x
# 创建模型实例
model = RNN(input_dim=100, hidden_dim=50, output_dim=1)
# 定义损失函数和优化器
criterion = nn.BCEWithLogitsLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 训练模型
num_epochs = 5
for epoch in range(num_epochs):
    for i, (texts, labels) in enumerate(train_loader):
        # 前向传播
        outputs = model(texts)
        loss = criterion(outputs, labels)
        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        if (i+1) % 100 == 0:
            print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item():.4f}')

五、总结

本文详细介绍了PyTorch这一强大的深度学习框架,包括其基本概念、安装方法、基础知识以及实战项目的应用。通过具体的代码示例,帮助我们快速入门PyTorch,并在实际项目中应用深度学习技术。

标签:__,dim,入门,nn,Python,self,torch,PyTorch
From: https://blog.csdn.net/oandy0/article/details/136855298

相关文章

  • python 代码练习示例
    判断数字位数##给定一个不超过5位的整数,判定该数的位数,以及依次打印,万位到个位。#接收用户输入的整数num=int(input("请输入一个小于等于5位数的整数:"))#将整数转换为字符串,计算整数的位数num_str=str(num)length=len(num_str)iflength>5:print("输入......
  • python把html渲染成带格式的文本
    在Python中,可以使用html2text库将HTML内容转换成纯文本,保留一定的格式。首先需要安装这个库:pipinstallhtml2text然后使用它的html2text函数将HTML转换为Markdown格式的文本:importhtml2text#示例HTML内容html_content="""<h1>标题</h1><p>这是一个段落。</p><ul>......
  • 减少循环嵌套,提升代码运行速度!你不知道的3个实用Python函数(转)
    原文地址(https://zhuanlan.zhihu.com/p/114787201)作为21世纪最流行的语言之一,Python有很多有趣的功能值得深入探索和研究。今天将讨论其中的三个你可能没听说过的函数,将从理论和实际应用两方面为你详细讲解。我之所以要讨论这些函数,主要是因为它们可以帮助你避免陷入编写循环中......
  • 看完本文若不能让你学通“Python”,我将永远退出IT界
    0基础小白怎么学Python?今天给大家分享一些学习Python的基本概念图,入门书籍、视频教程以及学习路上最有效的方法。Python基本概念最全图1.Python解释器:2.Python数据结构:3.变量与运算符:4.Python流程控制:5.Python文件处理:6.Python输入输出:7.Python异常:8......
  • 代码质量管理 SonarQube-01-入门介绍
    拓展阅读Devops-01-devops是什么?Devops-02-Jpom简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件代码质量管理SonarQube-01-入门介绍项目管理平台-01-jira入门介绍缺陷跟踪管理系统,为针对缺陷管理、任务追踪和项目管理的商业性应用软件项目管理平台-01-Phab......
  • Python众筹项目结果预测:优化后随机森林分类器可视化
    全文链接:https://tecdat.cn/?p=35412原文出处:拓端数据部落公众号分析师:YiChenXia随着信息技术的飞速发展,众筹作为一个互联网金融的子领域已经成为个人和小企业主筹集资金支持梦想的创新渠道。无论对于众筹发起者还是众筹平台而言,如何利用历史数据去准确预测一个众筹项目的成功......
  • Python - argparse
    需求背景:为python脚本定义参数信息,从命令行获取脚本运行时传入的参数及订单号importargparseimportsysdefparse_arg(cmd_parame): parse=argparse.ArgumentParser(description='thisisademo') parse.add_argument('order',type=str) parse.add_argument('-e'......
  • JSP语法 《Java Web开发从入门到实战》第三章节
    目录一、JSP页面的基本构成1、普通的HTML标记2、JSP注释(增强JSP文件的可读性,便于Web项目的更新和维护)3、Java脚本元素:声明、Java程序片、Java表达式4、JSP标记:指令标记、动作标记、自定义标记等二、<%%>和<%!%>的不同之处1、翻译不同2、定义不同3、声明不同......
  • vue入门小案例(表单收集单页面)
    实例在Vue中创建一个表单收集页面,可以使用v-model来实现双向数据绑定,以便收集和处理用户输入的数据。以下是一个简单的示例,包含文本输入、选择框和单选按钮的表单页面<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"conten......
  • vue入门小案例(编写一个可编辑的表格)
    案例:要在Vue中创建一个可编辑的表格,你可以使用Vue的双向数据绑定功能。以下是一个简单的示例。首先,确保你已经在项目中引入了Vue。接下来,创建一个HTML文件,并在其中添加以下代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewpor......