首页 > 其他分享 >【深度学习与NLP】——快速入门Pytorch基本语法

【深度学习与NLP】——快速入门Pytorch基本语法

时间:2024-08-08 15:26:25浏览次数:11  
标签:NLP 入门 torch 张量 Pytorch print grad Tensor

目录

Pytorch基本语法

1.1 认识Pytorch

1.1.1 什么是Pytorch

1.1.2 Pytorch的基本元素操作

1.1.3 Pytorch的基本运算操作

1.1.4 关于Torch Tensor和Numpy array之间的相互转换

1.1.5 小节总结

1.2 Pytorch中的autograd

1.2.1 关于torch.Tensor

1.2.2 关于Tensor的操作

1.2.3 关于梯度Gradients

1.2.4 小节总结


Pytorch基本语法

1.1 认识Pytorch

1.1.1 什么是Pytorch

  • Pytorch是一个基于Numpy的科学计算包, 向它的使用者提供了两大功能.
    • 作为Numpy的替代者, 向用户提供使用GPU强大功能的能力.
    • 做为一款深度学习的平台, 向用户提供最大的灵活性和速度.

1.1.2 Pytorch的基本元素操作

  • Tensors张量: 张量的概念类似于Numpy中的ndarray数据结构, 最大的区别在于Tensor可以利用GPU的加速功能.

  • 我们使用Pytorch的时候, 常规步骤是先将torch引用进来, 如下所示:

from __future__ import print_function
import torch
  • 创建矩阵的操作
  • 创建一个没有初始化的矩阵:
x = torch.empty(5, 3)
print(x)

  • 创建一个有初始化的矩阵:
x = torch.rand(5, 3)
print(x)

对比有无初始化的矩阵: 当声明一个未初始化的矩阵时, 它本身不包含任何确切的值. 当创建一个未初始化的矩阵时, 分配给矩阵的内存中有什么数值就赋值给了这个矩阵, 本质上是毫无意义的数据.

  • 创建一个全零矩阵并可指定数据元素的类型为long
x = torch.zeros(5, 3, dtype=torch.long)
print(x)

  • 直接通过数据创建张量
x = torch.tensor([2.5, 3.5])
print(x)

  • 通过已有的一个张量创建相同尺寸的新张量
# 利用news_methods方法得到一个张量
x = x.new_ones(5, 3, dtype=torch.double)
print(x)

# 利用randn_like方法得到相同张量尺寸的一个新张量, 并且采用随机初始化来对其赋值
y = torch.randn_like(x, dtype=torch.float)
print(y)

  • 得到张量的尺寸:
print(x.size())

  • 注意:
    • torch.Size函数本质上返回的是一个tuple, 因此它支持一切元组的操作.

1.1.3 Pytorch的基本运算操作

  • 加法操作:
y = torch.rand(5, 3)
print(x + y)

  • 第二种加法方式:
print(torch.add(x, y))

  • 第三种加法方式:
# 提前设定一个空的张量
result = torch.empty(5, 3)
# 将空的张量作为加法的结果存储张量
torch.add(x, y, out=result)
print(result)

  • 第四种加法方式: in-place (原地置换)
y.add_(x)
print(y)

  • 注意:
    • 所有in-place的操作函数都有一个下划线的后缀.
    • 比如x.copy_(y), x.add_(y), 都会直接改变x的值.
  •  用类似于Numpy的方式对张量进行操作:
  • 表示选取张量 x 的所有行的第 2 列(索引从 0 开始,所以第 1 列的索引是 1)。
print(x[:, 1])


  • 改变张量的形状: torch.view()
x = torch.randn(4, 4)
# tensor.view()操作需要保证数据元素的总数量不变
y = x.view(16)
# -1代表自动匹配个数
z = x.view(-1, 8)
print(x.size(), y.size(), z.size())

  • 如果张量中只有一个元素, 可以用.item()将值取出, 作为一个python number
x = torch.randn(1)
print(x)
print(x.item())

1.1.4 关于Torch Tensor和Numpy array之间的相互转换

  • Torch Tensor和Numpy array共享底层的内存空间, 因此改变其中一个的值, 另一个也会随之被改变.
a = torch.ones(5)
print(a)

  • 将Torch Tensor转换为Numpy array
b = a.numpy()
print(b)

  • 对其中一个进行加法操作, 另一个也随之被改变:
a.add_(1)
print(a)
print(b)

  • 将Numpy array转换为Torch Tensor:
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)

  • 注意:
    • 所有在CPU上的Tensors, 除了CharTensor, 都可以转换为Numpy array并可以反向转换.
  • 关于Cuda Tensor: Tensors可以用.to()方法来将其移动到任意设备上.
# 如果服务器上已经安装了GPU和CUDA
if torch.cuda.is_available():
    # 定义一个设备对象, 这里指定成CUDA, 即使用GPU
    device = torch.device("cuda")
    # 直接在GPU上创建一个Tensor
    y = torch.ones_like(x, device=device)
    # 将在CPU上面的x张量移动到GPU上面
    x = x.to(device)
    # x和y都在GPU上面, 才能支持加法运算
    z = x + y
    # 此处的张量z在GPU上面
    print(z)
    # 也可以将z转移到CPU上面, 并同时指定张量元素的数据类型
    print(z.to("cpu", torch.double))

输出结果:

tensor([0.6469], device='cuda:0')

tensor([0.6469], dtype=torch.float64)

1.1.5 小节总结

  • 学习了什么是Pytorch.

    • Pytorch是一个基于Numpy的科学计算包, 作为Numpy的替代者, 向用户提供使用GPU强大功能的能力.
    • 做为一款深度学习的平台, 向用户提供最大的灵活性和速度.
  • 学习了Pytorch的基本元素操作.

    • 矩阵的初始化:
      • torch.empty()
      • torch.rand(n, m)
      • torch.zeros(n, m, dtype=torch.long)
    • 其他若干操作:
      • x.new_ones(n, m, dtype=torch.double)
      • torch.randn_like(x, dtype=torch.float)
      • x.size()
  • 学习了Pytorch的基本运算操作.

    • 加法操作:
      • x + y
      • torch.add(x, y)
      • torch.add(x, y, out=result)
      • y.add_(x)
    • 其他若干操作:
      • x.view()
      • x.item()
  • 学习了Torch Tensor和Numpy Array之间的相互转换.

    • 将Torch Tensor转换为Numpy Array:
      • b = a.numpy()
    • 将Numpy Array转换为Torch Tensor:
      • b = torch.from_numpy(a)
    • 注意: 所有才CPU上的Tensor, 除了CharTensor, 都可以转换为Numpy Array并可以反向转换.
  • 学习了任意的Tensors可以用.to()方法来将其移动到任意设备上.

    • x = x.to(device)

1.2 Pytorch中的autograd

  • 掌握自动求导中的Tensor概念和操作.
  • 掌握自动求导中的梯度Gradients概念和操作.
  • 在整个Pytorch框架中, 所有的神经网络本质上都是一个autograd package(自动求导工具包)
    • autograd package提供了一个对Tensors上所有的操作进行自动微分的功能.

1.2.1 关于torch.Tensor

  • torch.Tensor是整个package中的核心类, 如果将属性.requires_grad设置为True, 它将追踪在这个类上定义的所有操作. 当代码要进行反向传播的时候, 直接调用.backward()就可以自动计算所有的梯度. 在这个Tensor上的所有梯度将被累加进属性.grad中.
  • 如果想终止一个Tensor在计算图中的追踪回溯, 只需要执行.detach()就可以将该Tensor从计算图中撤下, 在未来的回溯计算中也不会再计算该Tensor.
  • 除了.detach(), 如果想终止对计算图的回溯, 也就是不再进行方向传播求导数的过程, 也可以采用代码块的方式with torch.no_grad():, 这种方式非常适用于对模型进行预测的时候, 因为预测阶段不再需要对梯度进行计算.

  • 关于torch.Function:
    • Function类是和Tensor类同等重要的一个核心类, 它和Tensor共同构建了一个完整的类, 每一个Tensor拥有一个.grad_fn属性, 代表引用了哪个具体的Function创建了该Tensor.
    • 如果某个张量Tensor是用户自定义的, 则其对应的grad_fn is None.

1.2.2 关于Tensor的操作

x1 = torch.ones(3, 3)
print(x1)

x = torch.ones(2, 2, requires_grad=True)
print(x)

  • 在具有requires_grad=True的Tensor上执行一个加法操作
y = x + 2
print(y)

  • 打印Tensor的grad_fn属性:
print(x.grad_fn)
print(y.grad_fn)

  • 在Tensor上执行更复杂的操作:
z = y * y * 3
out = z.mean()
print(z, out)

  • 关于方法.requires_grad_(): 该方法可以原地改变Tensor的属性.requires_grad的值. 如果没有主动设定默认为False.
a = torch.randn(2, 2)
a = ((a * 3) / (a - 1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
b = (a * a).sum()
print(b.grad_fn)

1.2.3 关于梯度Gradients

  • 在Pytorch中, 反向传播是依靠.backward()实现的.
out.backward()
print(x.grad)

  • 关于自动求导的属性设置: 可以通过设置.requires_grad=True来执行自动求导, 也可以通过代码块的限制来停止自动求导.
print(x.requires_grad)
print((x ** 2).requires_grad)

with torch.no_grad():
    print((x ** 2).requires_grad)

  • 可以通过.detach()获得一个新的Tensor, 拥有相同的内容但不需要自动求导.
print(x.requires_grad)
y = x.detach()
print(y.requires_grad)
print(x.eq(y).all())

1.2.4 小节总结

  • 学习了torch.Tensor类的相关概念.

    • torch.Tensor是整个package中的核心类, 如果将属性.requires_grad设置为True, 它将追踪在这个类上定义的所有操作. 当代码要进行反向传播的时候, 直接调用.backward()就可以自动计算所有的梯度. 在这个Tensor上的所有梯度将被累加进属性.grad中.
    • 执行.detach()命令, 可以将该Tensor从计算图中撤下, 在未来的回溯计算中不会再计算该Tensor.
    • 采用代码块的方式也可以终止对计算图的回溯:
      • with torch.no_grad():
  • 学习了关于Tensor的若干操作:

    • torch.ones(n, n, requires_grad=True)
    • x.grad_fn
    • a.requires_grad_(True)
  • 学习了关于Gradients的属性:

    • x.grad
    • 可以通过.detach()获得一个新的Tensor, 拥有相同的内容但不需要自动求导.

标签:NLP,入门,torch,张量,Pytorch,print,grad,Tensor
From: https://blog.csdn.net/lxwssjszsdnr_/article/details/140926140

相关文章

  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了_网络安全教程
    学前感言:1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决.......
  • 2024最新版IntelliJ IDEA安装教程(非常详细)从零基础入门到精通,看完这一篇就够了_idea20
    IDEA的使用IDEA的简单介绍IDEA的主要优势IDEA的卸载IDEA的安装第一个程序:HelloWorld结束语IDEA的简单介绍IDEA全称IntelliJIDEA,是Java语言对的集成开发环境,IDEA在业界被认为是公认最好的Java开发工具。IDEA的主要优势✅功能强大①强大的整合能力。比如:GitMavenSp......
  • 初识LangChain的快速入门指南
    LangChain概述LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。LangChain简化了LLM应用程序生命周期的各个阶段:开发阶段:使用Lan......
  • 全网最全:一文入门最热的LLM应用开发框架LangChain_langchain框架
    f####1.LangChain简介1.1.LangChain发展史LangChain的作者是HarrisonChase,最初是于2022年10月开源的一个项目,在GitHub上获得大量关注之后迅速转变为一家初创公司。2017年HarrisonChase还在哈佛上大学,如今已是硅谷的一家热门初创公司的CEO,这对他来说是......
  • docker 简单入门1
     这里写自定义目录标题DockerDocker安装(centos)Docker启动、停止、查看状态Docker其他命令(常用)查询镜像安装镜像在线安装镜像离线安装镜像(说明可能不标准)启动容器重启容器停止容器修改容器中的配置文件(说明可能不标准)dockercomimtdockersavedockerlo......
  • SpringBoot项目入门
    1.SpringBoot简介SpringBoot是一个用于快速构建基于Spring框架的应用程序的开源框架。它旨在简化Spring应用程序的初始搭建和开发过程,通过提供默认配置和约定大于配置的原则,使得开发者能够更快地启动新项目并减少样板代码的编写。 SpringBoot的一些关键特性:自动......
  • AI入门之深度学习:基本概念篇
    1、什么是深度学习1.1、机器学习  图1:计算机有效工作的常用方法:程序员编写规则(程序),计算机遵循这些规则将输入数据转换为适当的答案。这一方法被称为符号主义人工智能,适合用来解决定义明确的逻辑问题,比如早期的PC小游戏:五子棋等,但是像图像分类、语音识别或自然语言翻译等......
  • Webpack入门基础知识及案例
    webpack相信大家都已经不陌生了,应用程序的静态模块打包工具。前面我们总结了vue,react入门基础知识,也分别做了vue3的实战小案例,react的实战案例,那么我们如何使用webpack对项目进行模块化打包呢?话不多说,开始!!目录一、熟悉webpack的主要功能二、Webpack的核心概念三、使用webp......
  • Autofac 基础入门
    1.安装 Autofac和 Autofac.Extensions.DependencyInjection2.举例如何使用,创建一个Interface的文件和Service的文件Interface是接口,Service是实现3,新建一个Config文件夹->AutofacInterfaceConfig.csusingAutofac;usingSystem.Reflection;namespaceWebApplication2.......
  • automapper的入门使用
    1.安装automapper2.创建一个Config文件夹->创建AutoMapperConfigs.cs文件3.配置AutoMapperConfigs.cs,里面的实体类我就不展示了,太多了namespaceFresh.Config{publicclassAutoMapperConfigs:Profile{///<summary>///在构造函数中配置映......