Pytorch认识与使用

一、Pytorch简介
        PyTorch是一个由Facebook的人工智能研究团队(FAIR)开发的开源深度学习框架。它提供了一个动态、可扩展且易于使用的深度学习平台,广受科研人员和工程师的欢迎。PyTorch的设计哲学强调易读性、简洁性以及开发者的友好性,它使用Python语言编写,并与Python的生态系统无缝集成,这使得它可以被广泛应用在研究项目和生产环境中。

二、环境安装
2.1在anaconda新建一个虚拟环境
conda creat -n torch39 python=3.9
conda activate torch39
2.2安装pytorch-cpu版本
pip install torch=2.1.0
2.3pycharm配置环境
三、张量的基本使用
3.1张量的介绍
张量是深度学习框架PyTorch中的核心数据结构,类似于NumPy中的多维数组。在PyTorch中,张量是所有计算的基础,可以用来表示和计算多维数组的数据。张量的概念来源于线性代数,但它已经被扩展到了多维数组,可以用来表示图像、音频、文本等各种类型的数据。

0维张量:将标量转化为张量得到的就是0维张量;

1维张量:将向量转化为张量得到的就是1维张量;

2维张量:将矩阵转化为张量得到的就是2维张量;

多维张量:将多维数组转化为张量得到的就是多维张量;

3.2张量的几个特性
张量具有以下几个重要的特性:

1.维度:张量是一个n维数组,其中n可以是任何正整数。每个维度代表了张量的一个轴,可以理解为数据的一个维度或者一个方向。例如,一个二维张量可以看作是一个矩阵,一个三维张量可以看作是一个体积数据。

2.数据类型:张量可以包含不同类型的数据,如整数、浮点数、布尔值等。在PyTorch中,张量的数据类型是由一个特定的类表示的,如`torch.int32`、`torch.float64`等。

3. 形状:张量的形状是由一个整数元组表示的,这个元组描述了张量在每个维度上的大小。形状决定了张量中元素的数量以及它们是如何组织在一起的。

4. 内存分配:张量在内存中的存储方式取决于其形状和数据类型。不同形状和数据类型的张量可能会影响计算效率和内存使用。

3.3张量基本运算

基本运算中,包括 add、sub、mul、div、neg 等函数, 以及这些函数的带下划线的版本 add、*sub*、mul、*div*、neg_,其中带下划线的版本为修改原数据。

3.3.1张量的乘法

点乘

矩阵的点乘指的是矩阵对应位置的元素相乘

叉乘(要求张量维度 ≥ 2)

叉乘运算要求第一个张量中的矩阵 shape: (n, m),第二个张量中矩阵 shape: (m, p), 两个矩阵叉乘运算 shape 为: (n,p)。运算符 @ 用于表示两个张量的叉乘运算

torch.matmul 对进行叉乘运算的张量维度没有限定。对数输入的 shape 不同的张量,对应的最后2个维度必须符合矩阵运算规则,其他维度需保持一致。

3.3.2张量拼接操作

张量的拼接操作在神经网络搭建过程中是非常常用的方法,例如: 在后面将要学习到的残差网络、注意力机制中都使用到了张量拼接。torch.cat 函数可以将两个张量根据指定的维度拼接起来

torch.cat 函数可以将两个张量根据指定的维度拼接起来。

3.3.3函数

reshape函数

reshape 函数可以在保证张量数据不变的前提下改变数据的维度,将其转换成指定的形状,在后面的神经网络学习时,会经常使用该函数来调节数据的形状,以适配不同网络层之间的数据传递。

squeeze和unsqueeze函数

squeeze 函数删除 形状为 1 的维度(升维),unsqueeze 函数添加形状为1的维度(降维)

transpose和permute函数

transpose 函数可以实现交换张量形状的指定维度, 例如: 一个张量的形状为 (2, 3, 4) 可以通过 transpose 函数把 3 和4 进行交换, 将张量的形状变为 (2, 4, 3)

permute 函数可以一次交换更多的维度。

 view和contigous函数

view 函数也可以用于修改张量的形状,但是其用法比较局限,只能用于存储在整块内存中的张量。在 PyTorch 中,有些张量是由不同的数据块组成的,它们并没有存储在整块的内存中,view 函数无法对这样的张量进行变形处理,例如: 一个张量经过了 transpose 或者 permute 函数的处理之后,就无法使用 view 函数进行形状操作。

3.4张量的创建

import torch
import numpy as np
 
 
# torch.tensor根据已有的数据创建张量
# torch.Tensor根据形状创建张量,也可以用来创建指定数据的张量
# torch.IntTensor创建一个整数张量,torch.FloatTensor创建一个浮点数张量,torch.DoubleTensor创建一个双精度浮点数张量
 
# 1.根据已有数据创建张量
def test1():
    # 1.1 创建标量张量
    data = torch.tensor(10)
    print(data)
    # 1.2 numpy创建张量
    data = np.random.randn(2, 3)  # 2行3列
    data = torch.tensor(data)
    print(data)
    # 1.3 列表
    data = [[10., 20., 30.], [40., 50., 60.]]
    data = torch.tensor(data)
    print(data)
 
 
# 2.根据形状创建张量
def test2():
    # 2.1 创建一个形状为(2,3)的张量
    data = torch.Tensor(2, 3)
    print(data)
    # 2.2 如果传递列表,则创建包含列表元素的张量
    data = torch.Tensor([10])
    print(data)
    data = torch.Tensor([[10], [20]])
    print(data)
 
 
def test3():
    # 3.1 创建一个形状为(2,3)的整数张量
    data = torch.IntTensor(2, 3)
    print(data)
    # 3.2 创建一个形状为(2,3)的浮点数张量
    data = torch.FloatTensor(2, 3)
    print(data)
    # 3.3 创建一个形状为(2,3)的双精度浮点数张量
    data = torch.DoubleTensor(2, 3)
    print(data)
 
 
if __name__ == '__main__':
    test1()
    test2()
    test3()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值