引言

本篇介绍Pytorch的基础数据类型,判断方式以及常用向量

基础数据类型

  • torch.Tensor是一种包含单一数据类型元素的多维矩阵。
  • 目前在1.2版本中有9种类型。

  • 同python相比,pytorch没有string类型;
  • 由于pytorch是面向计算的,对于字符这种通常通过编码下手;
  • 怎样用数字的形式去表示语言(字符串) : NLP -> one-hot 或 Embedding(Word2vec,glove)

判断数据类型

  1. 打印数据类型:a.type()
  2. 打印的是基本的数据类型,没有提供额外的信息:type(a)
  3. 合法性检验:isinstance(a, torch.FloatTensor)
1
2
3
4
5
6
7
8
In[2]: import torch
In[3]: a = torch.randn(2,3) //两维 , 每个数字是由随机的正态分布来初始化的,均值是0 方差是1
In[4]: a.type() // 方法一:打印数据类型
Out[4]: 'torch.FloatTensor'
In[5]: type(a) // 方法二:较少
Out[5]: torch.Tensor
In[6]: isinstance(a, torch.FloatTensor) // 方法三:合法性检验
Out[6]: True

同一个tensor部署在cpu和gpu时的数据类型是不一样的

1
2
3
4
5
In[7]: isinstance(a, torch.cuda.FloatTensor)
Out[7]: False
In[8]: a = a.cuda()
In[9]: isinstance(a, torch.cuda.FloatTensor)
Out[9]: True

标量 Dimension 0 / rank 0

1
2
In[12]: torch.tensor(1.3)
Out[12]: tensor(1.3000)

loss 就是一个标量

查看标量的维度

  1. len(a.shape)
  2. a.dim()
  3. len(a.size())
1
2
3
4
5
6
7
8
9
In[13]: a = torch.tensor(2.2)
In[14]: a.shape
Out[14]: torch.Size([])
In[15]: len(a.shape)
Out[15]: 0
In[16]: a.size()
Out[16]: torch.Size([])
In[17]: a.dim()
Out[17]: 0

常用向量

1维向量

  1. torch.tensor([ 数据 ])
  2. torch.FloatTensor(维度)
  3. 从numpy导入torch.from_numpy(data)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
In[19]: torch.tensor([1.1])
Out[19]: tensor([1.1000])
In[20]: torch.tensor([1.1, 2.2])
Out[20]: tensor([1.1000, 2.2000])
In[21]: torch.FloatTensor(1)
Out[21]: tensor([0.])
In[22]: torch.FloatTensor(2)
Out[22]: tensor([-1.0842e-19, 1.8875e+00])
In[23]: import numpy as np
In[24]: data = np.ones(2)
In[25]: data
Out[25]: array([1., 1.])
In[26]: torch.from_numpy(data)
Out[26]: tensor([1., 1.], dtype=torch.float64)

dim为1的向量有 Bias

Linear Input 线性层的输入

从0.4版本增加了 标量的表示,以前是[0.3]来表示标量,但这样语义上不太清晰。

1维的形状如何得到

  • .size
  • .shape

几个概念:

dim:指的是size/shape的长度

size/shape指的是具体的形状

tensor指的是具体的数字

2维向量

1
2
3
4
5
6
7
8
9
10
11
12
13
In[30]: a = torch.randn(2,3)        
In[31]: a
Out[31]:
tensor([[-0.1353, 0.9325, -1.7155],
[-1.9443, 0.3485, 0.6418]])
In[32]: a.shape
Out[32]: torch.Size([2, 3])
In[33]: a.size(0)
Out[33]: 2
In[34]: a.size(1)
Out[34]: 3
In[35]: a.shape[1]
Out[35]: 3

常用于带有batch的 Linear Input 例如 [4, 784] 4张784像素的图片

3维向量

形状:list(a.shape)

1
2
3
4
5
6
7
8
9
10
11
12
13
In[49]: a = torch.rand(1,2,3)     // 使用随机的均匀分布
In[50]: a
Out[50]:
tensor([[[0.4700, 0.7649, 0.7688],
[0.1973, 0.5232, 0.0038]]])
In[51]: a.shape
Out[51]: torch.Size([1, 2, 3])
In[52]: a[0] // 取第一个维度的第零号元素 [2,3]
Out[52]:
tensor([[0.4700, 0.7649, 0.7688],
[0.1973, 0.5232, 0.0038]])
In[53]: list(a.shape)
Out[53]: [1, 2, 3]

场景:NLP文字处理

RNN Input Batch 例如 W,F[10, 100] 一个句子由10个单词构成,且每个单词由100维向量表示

W,S,F[10, 20, 100] 20个句子,每个句子由10个单词构成,且每个单词由100维向量表示

4维向量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
In[54]: a = torch.rand(2,3,28,28)             //随即均匀化
In[55]: a
Out[55]:
tensor([[[[0.2990, 0.3407, 0.0149, ..., 0.7321, 0.9115, 0.4388],
[0.2001, 0.0137, 0.1427, ..., 0.5508, 0.4747, 0.2132],
[0.0919, 0.7190, 0.0269, ..., 0.9440, 0.5967, 0.4414],
...,
[0.7014, 0.4306, 0.1627, ..., 0.8383, 0.4709, 0.3334],
[0.7733, 0.2284, 0.5533, ..., 0.3841, 0.6881, 0.3352],
[0.5796, 0.7640, 0.3492, ..., 0.6319, 0.6660, 0.1536]], [[0.3840, 0.4825, 0.6113, ..., 0.5034, 0.2546, 0.1246],
[0.2549, 0.4116, 0.8511, ..., 0.8956, 0.4064, 0.0360],
[0.4601, 0.8654, 0.9965, ..., 0.7325, 0.5524, 0.3354],
...,
[0.0220, 0.1239, 0.6685, ..., 0.6109, 0.7329, 0.2162],
[0.1790, 0.0919, 0.0559, ..., 0.6279, 0.9586, 0.4919],
[0.8246, 0.1804, 0.6107, ..., 0.5497, 0.6124, 0.1172]], [[0.4151, 0.1750, 0.6129, ..., 0.1962, 0.3190, 0.0227],
[0.2165, 0.9139, 0.3081, ..., 0.7211, 0.2220, 0.1521],
[0.7928, 0.9053, 0.7208, ..., 0.9461, 0.2194, 0.5177],
...,
[0.4514, 0.6893, 0.3093, ..., 0.7236, 0.1157, 0.7789],
[0.6290, 0.8666, 0.4240, ..., 0.4480, 0.7474, 0.0391],
[0.4798, 0.3155, 0.9216, ..., 0.5462, 0.2013, 0.7234]]], [[[0.1887, 0.1911, 0.5820, ..., 0.1653, 0.7776, 0.3725],
[0.3350, 0.3595, 0.6138, ..., 0.3139, 0.1971, 0.7547],
[0.3334, 0.5563, 0.6428, ..., 0.6337, 0.3126, 0.0349],
...,
[0.9218, 0.2081, 0.9644, ..., 0.1333, 0.1972, 0.1489],
[0.9598, 0.0323, 0.7847, ..., 0.8366, 0.9486, 0.1052],
[0.2474, 0.6811, 0.1599, ..., 0.2132, 0.0211, 0.4123]], [[0.6994, 0.0694, 0.3789, ..., 0.2333, 0.3922, 0.5462],
[0.5692, 0.1016, 0.0053, ..., 0.4257, 0.2898, 0.3655],
[0.9806, 0.3084, 0.0129, ..., 0.8453, 0.6952, 0.6759],
...,
[0.2060, 0.5261, 0.5321, ..., 0.1070, 0.4960, 0.7185],
[0.1417, 0.7306, 0.0398, ..., 0.9186, 0.9080, 0.8449],
[0.0294, 0.5325, 0.5534, ..., 0.0995, 0.5660, 0.1330]], [[0.5168, 0.4303, 0.9170, ..., 0.3214, 0.1818, 0.4606],
[0.4073, 0.9889, 0.2090, ..., 0.2702, 0.9984, 0.3591],
[0.2428, 0.7390, 0.6293, ..., 0.3361, 0.6701, 0.1649],
...,
[0.7242, 0.7595, 0.5713, ..., 0.3498, 0.6220, 0.9937],
[0.0988, 0.9972, 0.5013, ..., 0.9467, 0.6382, 0.4678],
[0.7906, 0.0443, 0.1911, ..., 0.2179, 0.5613, 0.8539]]]])
In[56]: a.shape
Out[56]: torch.Size([2, 3, 28, 28]) In[56]: a.shape
Out[56]: torch.Size([2, 3, 28, 28])
In[57]: a.numel() //number of element 2*3*28*28 tensor占用内存的数量
Out[57]: 4704
In[58]: a.dim()
Out[58]: 4

场景 : CNN

[b, c, h, w] b:几张照片 c: 通道 w:宽 h:高度

PS:在我们学习的过程中,一定要结合着物理意义去学习,就比如说我创建一个 [4,3,28,28] 的向量,这个向量有什么含义?当我们把向量进行matmul(矩阵相乘) 后,又有什么含义?不仅仅是为学习工具而去学习,而要时刻明白我这样做能达到什么样的效果。

 

Pytorch的基础数据类型的更多相关文章

  1. 【动手学pytorch】pytorch的基础操作

    一.Tensor a)       张量是torch的基础数据类型 b)       张量的核心是坐标的改变不会改变自身性质. c)        0阶张量为标量(只有数值,没有方向的量),因为它不随 ...

  2. [.net 面向对象编程基础] (3) 基础中的基础——数据类型

    [.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...

  3. TypeScript学习指南第一章--基础数据类型(Basic Types)

    基础数据类型(Basic Types) 为了搭建应用程序,我们需要使用一些基础数据类型比如:numbers,strings,structures,boolean等等. 在TypeScript中除了Ja ...

  4. 【Swift】学习笔记(一)——熟知 基础数据类型,编码风格,元组,主张

    自从苹果宣布swift之后,我一直想了解,他一直没有能够把它的正式学习,从今天开始,我会用我的博客来驱动swift得知,据我们了解还快. 1.定义变量和常量 var  定义变量,let定义常量. 比如 ...

  5. 二、Windows基础数据类型

    六.Windows Data Types 简介: 6.1.这些数据类型都是C语言数据类型的再次的进行包装. 6.2.因为考虑到如果使用的是C中的基础数据类型可能无法表示,想表示的精准的含义. 6.3. ...

  6. java基础数据类型包装类

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  7. java.lang基础数据类型boolean、char、byte、short、int、long、float、double (JDK1.8)

    java.lang.Boolean public static int hashCode(boolean value) { return value ? 1231 : 1237; } JDK 1.8新 ...

  8. Python基础数据类型之列表和元组

    一.列表   list 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li ...

  9. Python基础数据类型之字典

      基础数据类型之字典 ps:数据类型划分:可变数据类型和不可变数据类型. 不可变数据类型:元组(tupe).布尔值(bool).整数型(int).字符串(str).不可变数据类型也称为可哈希. 可变 ...

随机推荐

  1. DotNetCore 3.0 助力 WPF本地化

    概览 随着我们的应用程序越来越受欢迎,我们的下一步将要开发多语言功能.方便越来越多的国家使用我们中国的应用程序, 基于 WPF 本地化,我们很多时候使用的是系统资源文件,可是动态切换本地化,就比较麻烦 ...

  2. 性能测试学习第五天-----Jmeter测试脚本&基础元件使用

    JMeter简介:一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具.具有高可扩展性.支持Web(HTTP/HTTPS).SOAP.FTP.JAVA等多种协 ...

  3. U盘制作启动盘后空间容量变小解决方法

    WinAll的快速恢复方式: 0.windows键+R(调出运行窗口)输入:diskpart回车(调出磁盘管理器) 1.输入:list disk回车(从大小容量确定目标U盘的盘符X) 2.输入:sel ...

  4. 如何在不到12天的时间里将网站权重优化到1(纯白帽SEO方法)

    之前操作了一个IDC网站,不到1个月的时间把网站的权重从0做到了1,本来想写篇文章分享相关的操作经验.后来因为网站整体规划的原因,IDC网站需要关闭一段时间做备案的更新,排名肯定就会掉了,然后怕大家看 ...

  5. maven学习(2)仓库和配置

    1:本地资源库.中央存储库.远程存储库 1.1   本地资源库 当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖需要下载.首先,Maven 将从本地资源库 ...

  6. Java笔记(持续更新中)

    Java语言的特点: 面向对象(封装,继承,多态) 平台无关性(JVM运行.class文件) 语言(泛型,Lambda) 类库(集合,并发,网络,IO/NIO) JRE(Java运行环境,JVM,类 ...

  7. MySQL基础(用的贼鸡儿多)

    整理有点乱,业余也玩玩系统,经常碰见这些玩意,有点烦,老是记不住 MySQL 基础语法 一.连接 MYSQL格式: mysql -h 主机地址 -u 用户名 -p 用户密码. 1.连接到本机上的 MY ...

  8. helm安装kafka集群并测试其高可用性

    介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 这种动作( ...

  9. java两个对象属性比较

    两个对象进行比较相等,有两种做法: 1,情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可.这里就不用说明 2.情况二:当除了情况一之外,还需知道是那个属性不同,那么就需要采用 ...

  10. JAVA 获取时间段内的每一天

    public class day { public static void main(String[] args) { // TODO Auto-generated method stub Strin ...