【学习笔记】【Pytorch】张量(Tensor)的基础操作

news2024/11/28 8:41:34

【学习笔记】【Pytorch】张量(Tensor)的基础操作

  • 一、创建张量
    • 1.使用数据创建张量
    • 2.无需数据的创建选项
    • 3.torch.Tensor与torch.tensor的区别
    • 4.PyTorch中张量的创建方法的选择
  • 二、张量的属性
    • 1.张量的 torch.dtype
    • 2.张量的 torch.device
    • 3.张量的 torch.layout
  • 三、张量的形状
  • 四、重构张量
      • reshape函数中-1表示的意义
  • 五、CNN中的输入张量形状和特征图

一、创建张量

参考
Pytorch中张量讲解 | Pytorch系列(四)
PyTorch中张量的创建方法的选择 | Pytorch系列(五)
官方文档

介绍:PyTorch中的张量是我们在PyTorch中编程神经网络时会用到的数据结构
在对神经网络进行编程时,数据预处理通常是整个过程的第一步,数据预处理的一个目标是将原始输入数据转换成张量形式
PyTorch中的张量就是torch.Tensor的Python类的一个实例

1.使用数据创建张量

这些是在PyTorch中使用数据(类似数组)创建张量对象(torch.Tensor类的实例)的主要方法:

  • torch.Tensor(data)
  • torch.tensor(data)
  • torch.as_tensor(data)
  • torch.from_numpy(data)

data可以使用Python列表或序列,但是numpy.ndarrays是更常见的选择。

> data = np.array([1,2,3])
> type(data)
numpy.ndarray


> o1 = torch.Tensor(data)
> o2 = torch.tensor(data)
> o3 = torch.as_tensor(data)
> o4 = torch.from_numpy(data)

> print(o1)
> print(o2)
> print(o3)
> print(o4)
tensor([1., 2., 3.])
tensor([1, 2, 3], dtype=torch.int32)
tensor([1, 2, 3], dtype=torch.int32)
tensor([1, 2, 3], dtype=torch.int32)

2.无需数据的创建选项

torch.eye()函数,它返回一个二维张量,对角线上是1,其他地方是0。eye() 这个名称与单位矩阵的思想有关,单位矩阵是一个方阵,主对角线上是1,其他地方都是0。

> print(torch.eye(2))
tensor([
    [1., 0.],
    [0., 1.]
])

torch.zeros()函数,它用指定形状参数的形状创建一个全部为 0 张量。

> print(torch.zeros([2,2]))
tensor([
    [0., 0.],
    [0., 0.]
])

torch.ones()函数,它创建了一个全部为 1 的张量。

> print(torch.ones([2,2]))
tensor([
    [1., 1.],
    [1., 1.]
])

torch.rand()函数,它创建了一个具有指定参数形状的张量,其值是随机的。

> print(torch.rand([2,2]))
tensor([
    [0.0465, 0.4557],
    [0.6596, 0.0941]
])

3.torch.Tensor与torch.tensor的区别

参考
torch.Tensor()与torch.tensor()
总结

  • torch.Tensor()是python类,调用torch.Tensor([1,2, 3, 4, 5])来构造一个tensor的时候,会调用Tensor类的构造函数,生成一个单精度浮点类型的张量。它不能指定数据类型,除非转成一个已知数据类型的张量,使用type_as(tesnor)将张量转换为给定类型的张量。

  • torch.tensor()是python的函数,其中data可以是list,tuple,NumPy,ndarray等其他类型,torch.tensor(data)会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor 、torch.FloatTensor和torch.DoubleTensor。通过设置dtype的函数参数值,生成对应类型的张量。

  • 共同点:都是生成一个 torch.Tensor 对象

import torch

dd = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 为了处理这个张量的形状,我们将创建一个 torch.Tensor 对象
t = torch.tensor(dd)
print(t)
print(type(t))  # <class 'torch.Tensor'>
print(t.type())  # torch.LongTensor
print(t.dtype)  # torch.int64


t = torch.Tensor(dd)
print(t)
print(type(t))  # <class 'torch.Tensor'>
print(t.type())  # torch.FloatTensor
print(t.dtype)  # torch.float32

输出

tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
<class 'torch.Tensor'>
torch.LongTensor
torch.int64

tensor([[1., 2., 3.],
        [4., 5., 6.],
        [7., 8., 9.]])
<class 'torch.Tensor'>
torch.FloatTensor
torch.float32

4.PyTorch中张量的创建方法的选择

参考
PyTorch中张量的创建方法的选择 | Pytorch系列(五)

二、张量的属性

参考
Pytorch中张量讲解 | Pytorch系列(四)

作为神经网络程序员,我们需要注意以下几点:

  • 张量包含统一类型(dtype)的数据。
  • 张量之间的计算取决于 dtype 和 device。

1.张量的 torch.dtype

在这里插入图片描述

2.张量的 torch.device

在这里插入图片描述

3.张量的 torch.layout

三、张量的形状

Tensor_object.shape 与 **Tensor_object.size()**操作一致。

import torch

dd = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]


# 为了处理这个张量的形状,我们将创建一个 torch.Tensor 对象
t = torch.tensor(dd)
print(t)
print(type(t)) # <class 'torch.Tensor'>

# 张量的形状
print(t.shape)  # torch.Size([3, 3])
print(t.size())  # torch.Size([3, 3])

输出:

tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
<class 'torch.Tensor'>

torch.Size([3, 3])
torch.Size([3, 3])

四、重构张量

参考
深度学习中关于张量的阶、轴和形状的解释 | Pytorch系列

介绍
当我们对神经网络进行编程时,我们必须经常执行的一种操作叫做reshape

当我们的张量在网络中流动时,在网络内部的不同点上会出现特定的形状,作为神经网络程序员,我们的工作就是理解传入的形状,并有能力根据需要重构形状。

关于重构,需要注意的一点是,形状中的分量值的乘积必须等于张量中元素的总数

import torch


dd = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]  # 二阶张量
t = torch.tensor(dd)
print(t)

t = t.reshape(1, 9)
print(t)
print(t.shape)  # torch.Size([1, 9])

输出

tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
tensor([[1, 2, 3, 4, 5, 6, 7, 8, 9]])
torch.Size([1, 9])

reshape函数中-1表示的意义

-1:表自动计算该位上的值。

import torch


dd = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]  # 二阶张量
t = torch.tensor(dd)
print(t)

t = t.reshape(-1, 1)
print(t)
print(t.shape)  # torch.Size([1, 9])

输出

tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
tensor([[1],
        [2],
        [3],
        [4],
        [5],
        [6],
        [7],
        [8],
        [9]])
torch.Size([9, 1])

五、CNN中的输入张量形状和特征图

参考
CNN中张量的输入形状和特征图 | Pytorch系列(三)

总结

  • 在CNN中的输入张量的形状通常长度为4,[Batch_size, Channels, Height, Width]。使用一个4阶张量表示一整个批次的图片,第一个轴代表图片批次(Image Batches)大小,第二个轴代表图片的颜色通道(Image Color Channels),最后两个轴表示图像的高度(Height)和宽度(Width)。

    • 图片的颜色通道:对于RGB图像,此处的通常值为3;如果使用灰度图像,则通常值为1。此颜色通道的解释仅适用于输入张量。
    • 图片批次:在神经网络中,我们通常都是批量处理样本,而不是只处理单个样本,因此该轴的长度告诉我们该批次中有多少个样本。
      例如给定的张量的形状[3,1,28,28],我们可以确定这个批次是含有三张28x28的灰度图片。
  • 输出通道:卷积操作会改变高度和宽度尺寸以及通道数,输出通道的数量是根据卷积层中使用的滤波器的数量而变化。卷积层的输出命名为输出通道而不是颜色通道。

  • 特征图(Feature Maps):对于输出通道,我们不再拥有颜色通道,而是修改过的通道,我们称之为feature maps。这些所谓的特征图是使用输入颜色通道和卷积过滤器进行卷积的输出。
    之所以使用“特征”这个词,是因为输出代表了图片的特定特征,比如边缘,这些映射是在网络在训练过程中学习的过程中出现的,并且随着我们深入网络而变得更加复杂。

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

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

相关文章

阿维塔冲击年10万台订单,第二款车型Q2发布

1月13日&#xff0c;阿维塔科技在重庆总部召开渠道合作伙伴大会。今年&#xff0c;阿维塔计划推出&#xff1a; •阿维塔11后驱版本 •并发布第二款产品&#xff0c;代号E12&#xff0c;定位中大型轿车。阿维塔今年计划冲击10万辆订单目标。在当前CHN平台的基础上&#xff0c;阿…

Openresty记录笔记

最近由于项目需要学习了安全代理的相关知识&#xff0c;其实刚开始的时候是非常需要一个入门的介绍&#xff0c;大概说明下这个到底是个什么东西&#xff0c;能干啥&#xff0c;简单的原理是什么&#xff0c;为此我记录下我看完用完的心得&#xff0c;记录成笔记。 一般我们代码…

Redis 持久化详解

目录一、简介二、RDB持久化2.1、SAVE2.2、BGSAVE2.3、SAVE选项2.4、RDB文件结构2.5、RDB文件载入三、AOF持久化3.1、开启AOF功能3.2、配置AOF文件的冲洗频率3.3、AOF重写3.3.1、BGREWRITEAOF命令&#xff08;手动&#xff09;3.3.2、AOF重写配置选项&#xff08;自动&#xff0…

Android | Service

Android Service Service 概念 实现程序后台运行的解决方案&#xff0c;一种可在后台执行长时间运行操作而不提供界面的应用组件。Service 的运行不依赖于任何用户界面&#xff0c;即使程序被切换到后台&#xff0c;或者用户打开了另外一个应用程序&#xff0c;Service 仍然能…

Vue3——第十五章(计算属性:computed)

一、基础示例 模板中的表达式虽然方便&#xff0c;但也只能用来做简单的操作。如果在模板中写太多逻辑&#xff0c;会让模板变得臃肿&#xff0c;难以维护。推荐使用计算属性来描述依赖响应式状态的复杂逻辑。 在这里定义了一个计算属性 publishedBooksMessage。computed() 方…

【设计模式】创建型模式·原型模式

设计模式学习之旅(五) 查看更多可关注后查看主页设计模式DayToDay专栏 一. 概述 用一个已经创建的实例作为原型&#xff0c;通过复制(克隆)该原型对象来创建一个和原型对象相同的新对象。 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具体原型对象必须实现…

Java基础(二)

1.标识符标识符&#xff1a;由数字、字符、下划线、$组成&#xff08;不能以数字、下划线开头&#xff09;java严格区分大小写2.命名规范包名&#xff1a;多单词组成时所有字母全部小写类名、接口名&#xff1a;多单词组成时&#xff0c;所有单词首字母大写变量名、方法名&…

屏幕录制工具哪个好用?分享3款相见恨晚的软件

在我们的日常生活中&#xff0c;我们经常使用截图和手机屏幕记录功能来记录一些重要的内容。然而&#xff0c;录制的图片清晰度很低&#xff0c;或者需要不断的截图&#xff0c;这很容易出错一些重要的内容&#xff0c;这个时候就需要进行录屏了。那么电脑上的屏幕录制工具哪个…

group by详解

group by功能 在SQL中group by主要用来进行分组统计&#xff0c;分组字段放在group by的后面&#xff1b;分组结果一般需要借助聚合函数实现。 group by语法结构 1、常用语法 语法结构 SELECT column_name1,column_name2, … 聚合函数1,聚合函数2 , … FROM table_name GROUP…

电脑删除了大文件怎么恢复?看看这四种方法

电脑能够帮助我们存储大量的文件&#xff0c;比如视频、文档、音频等&#xff0c;但是随着时间的流逝&#xff0c;有些文件所存在的意义也变得毫无价值了&#xff0c;这时候很多小伙伴都会选择删除操作&#xff0c;可是由于电脑磁盘内容过多&#xff0c;容易面临重要文件被误删…

硬件仿真加速器与原型验证平台

基于软件仿真工具对于动辄几百万门的ASIC验证而言&#xff0c;几乎显得力不从心。不管是从成本还是从性能的角度来看&#xff0c;使用硬件仿真器或者基于FPGA的原型验证平台&#xff0c;几乎是验证工程师的不二法门。因为基于硬件的环境能够极大的提高验证的速度&#xff0c;增…

Promise(基础)

Promise是什么 1.promise是一门新的技术&#xff08;ES6规范&#xff09; 2.Promise是JS中一编程的解决方案&#xff08;旧的解决方案是单纯的使用回调函数&#xff09; 3.promise一个构造函数&#xff0c;promise队形用来封装一个一步操作并可以获取其成功/失败的结果值。 注…

sparksql案例实操

sparksql案例实操解决语句如下 select * from( select , rank()over(partition by area order by clickCnt desc) from(select area, product_name, count()as clickCnt from( select a.*, p.product_name, c.area, c.city_name from user_visit_action a join product_info p…

Dubbo与Spring集成

Dubbo框架常被当作第三方框架集成到应用中&#xff0c;当Spring集成Dubbo框架后&#xff0c;为什么在编写代码的时候&#xff0c;只用了DubboReference注解就可以调用提供方的服务了呢&#xff1f;这篇笔记就是分析Dubbo框架是怎么与Spring结合的。 现状integration层代码编写…

关于嵌入式学习和规划,求指点?

在知乎上收到的一个提问问题&#xff1a;各位大佬好&#xff0c;我先说说基本情况&#xff0c;28岁&#xff0c;北京&#xff0c;嵌入式软开&#xff0c;军工行业。硕士毕业一年半。工作不忙收获很少&#xff0c;造成我自己特别迷茫&#xff0c;没有了方向&#xff0c;自己学没…

【C++】Hash闭散列

目录 一、哈希的概念 1.1 哈希冲突 1.2 哈希函数 1.3 装载因子 二、闭散列 2.1 线性探测 2.2 Insert 插入 2.3 Find 查找 2.4 Erase删除 2.5 插入复杂类型 2.6 二次探测 三、源代码与测试用例 3.1 hash源代码 3.2 测试用例 一、哈希的概念 在前面学习了二叉搜索…

多巴胺聚乙二醇多巴胺,Dopamine-PEG-Dopamine简介,多巴胺是具有正性肌力活动的单胺化合物

产品名称&#xff1a;多巴胺聚乙二醇多巴胺&#xff0c;双多巴胺聚乙二醇&#xff08;Dopamine-PEG-Dopamine&#xff09; 中文别名&#xff1a;多巴胺PEG多巴胺&#xff0c;双多巴胺聚乙二醇 英文名称&#xff1a;Dopamine-PEG-Dopamine 存储条件&#xff1a;-20C&#xff0…

磨金石教育影视技能干货分享|浅析中国CG特效的发展现状

中国CG特效的发展2015年是一个分水岭。在2015年之前&#xff0c;中国CG 特效发展是混乱的&#xff0c;不成熟的。总体表现就是技术水平不足&#xff0c;缺少人才培养的体系。当时从事CG的公司&#xff0c;大概有两个类型&#xff1a;“技术型与业务型”。所谓技术型的公司&…

设计模式_结构型模式 -《装饰器模式》

设计模式_结构型模式 -《装饰器模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 概述 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜…

PowerDesigner设计表时显示注释列Comment

首先&#xff0c;使用 PowerDesigner 新建模型&#xff0c;File —> New Model 然后&#xff0c;切换到模型类型(Model types)选项卡&#xff0c;选中 Physical Diagram 然后点击右侧表格图标&#xff0c;在左侧面板中创建表格如下。双击表格&#xff0c;找到Columns选项卡…