pytorch张量数据类型入门
1、对于pytorch的深度学习框架,其基本的数据类型属于张量数据类型,即Tensor数据类型,对于python里面的int,float,int array,flaot array对应于pytorch里面即在前面加一个Tensor即可——intTensor ,Float tensor,IntTensor of size [d1,d2...], FloatTensor of size[d1,d2,...]
2、对于pytorch,并不能表示string类型的数据类型,一般情况下,可以将其数据分类的string结果进行编码表示,将其编码为一个向量的数据类型[d1,d2...dn],这个方法将其称为One-hot的编码表示方法。其中,n为数据分类结果的类别数目,即表示向量的总长度。例如:对于数据进行分类的时候,其实现的功能是区分猫和狗,一共含有两个数据分类结果,因此可以将其结果的类别进行编码表示为[0,1]猫和[1,0]狗
3、对于pytorch里面的数据进行数据类型判断和输出时,一般有三种方法:
(1)print(a.type):输出数据a的详细数据类型;
(2)print(type(a)):输出数据a的基本数据类型,没有(1)中那么详尽;
(3)print(isinstance(a,torch.FloatTensor)):用来输出数据a是否为torch.Tensor数据类型,即返回值为True或者False.
4、对于pytorch的张量Tensor数据类型,在不同的平台上是不一样的,如果在CPU上即为正常的张量Tensor数据类型,如果在GPU上面,则需要将其数据类型转换:
data=data.cuda(),此时data的数据类型从torch.FlaotTensor转换为了torch.cuda.FloatTensor,它可以在cuda上面进行算法的加速实现。
5、对于pytorch里面的标量数据a,进行相关的数据定义时,一般将其定义为torch.tensor(a),则输出时返回为tensor(a)
6、对于标量的数据类型,其数据shape输出一般为a.shape=tensor.size([]),对于其长度输出len(a.shape)=0,另外,对于a.size也是等于tensor.size([])的。
7、对于pytorch里面的任何一个张量数据torch.tensor([d1,d2,d3,d4])DIM和size以及shape三种数据属性的含义解析与区分如下:
DIM是指张量数据的长度(即数据的层数)=len(a.shape),size和shape都是指张量数据的形状;
另外,a.numel()是指数据的大小为d1*d2*d3*d4
(1)DIM=2:
a=torch.tensor([4,784])
其中4是指数据图片的数目,而784是指每一张图片的特征维度
举例:对于a=torch.tensor([1,2,3])
适用于普通的机器学习数据
(2)DIM=3:
1)a.size/shape=tensor.size([1,2,3])
2)a.size(0)=1
3)a.shape[2]=3
4)a[0].shape=[2,3]
适用于RNN神经网络的数据类型[length,num,feature]
例如,对于RNN神经网络进行语音识别与处理时[10,20,100]表示:每个单词包含100个特征,一句话一共有10个单词,而每次输20句话
(3)DIM=4:
一般适用于CNN卷积神经网络[b,c,h,w]:图像处理中图片的信息
torch.tensor([2,3,28,28]):
1)2是指每次输入的图片的个数
2)3是指每张图片的基本特征通道类型
3)28,28是指每张图片的像素特征:长和宽
8、创建Tensor数据的方法主要有以下几种:
(1)Import from numpy:
a=np.array([1.1,2.1)
b=torch.from_numpy(a)
a=np.ones([2,3]) #定义矩阵的方式
b=torch.from_numpy(a)
注:从numpy中导入的数据float类型其实是double类型的。
(2)Import from List:
a=torch.tensor([[1.1,2.1],[1.5,1.2]]),这里的小写tensor中的list数据就是指data本身数据
b=torch.FloatTensor/Tensor(d1,d2,d3),这里的大写Tensor中为数据的shape,即数据的维度组成
9、生成未初始化的数据uninitialized:
(1)torch.empty()
(2)torch.FloatTensor(d1,d2,d3)
(3)torch.IntTensor(d1,d2,d3)
10、tensor数据的随机初始化的方式—rand/rand_like(0-1),randint(整数数据类型),randn(正态分布数据):
(1)torch.rand():产生0-1之间的数据
(2)torch.rand_like(a):a为一个tensor数据类型,产生一个和a数据shape相同的随机tensor数据类型
(3)torch.randint(min,max,[d1,d2,d3]):产生一个shape类型为[d1,d2,d3]的tensor数据,数据最小和最大分别为min和max
(4)torch.randn:产生一个正态分布的数据类型N(0,1),对于自定义的正态分布的数据N(mean,std),一般需要用到torch.normal()函数,一般需要两步步骤进行,其具体的用法如下举例所示:
a=torch.normal(mean=torch.full([10],0)),std=torch.arange(1,0,-0.1))
b=a.reshape(2,5)
11、生成一个全部填充相同的数据:torch.full([d1,d2,de3],a)其中填充数据为a
12、递增或者递减函数API:arange/range
torch.arange(min,max,distance):左闭右开区间,不包含最大值
torch。range(min,max,distance):全闭区间,包含最大值,不推荐使用
13、linspace/logspace:线性空间
(1)torch.linspace(min,max,steps=data number):返回的是等间距的数据,其中左右数据均包括,数据个数为steps,数据间隔为(max-min)/(steps-1)
(2)torch.logspace(min,max,steps=data number):返回的是10的各个线性空间次方的数值
14、torch中一些零、一和单位张量数据生成API:
torch.zeros(3,4) #零张量数据
torch.ones(3,4) #1张量数据
torch.eye(4,5) #单位张量数据
15、randperm:主要是产生随机的索引值:
torch.randperm(10):在[0,10),即0-9产生随机的10个索引

综上所示,对于tensor张量数据类型的基础训练python代码如下所示:

import torch
a=torch.randn([1,2,3,4])
print(a)
print(a.dim()) #输出张量数据的层数,即长度
print(a.dim()==len(a.shape))
print(a.numel()) #输出张量数据的总个数,即数据大小,占内存的个数
print(a.shape) #输出数据的形状
print(a.size())
print(a.size(3)) #输出size和shape的其中元素
print(a.shape[3])
x=torch.empty(2,2,3)
print(x)
print(torch.IntTensor(2,3))
print(torch.FloatTensor(1,2,3))
print(torch.Tensor(1,2,10)) #未初始化tensor数据,占据一定的内存区间
print(x.type()) #输出tensor数据类型
#torch.set_default_tensor_type(torch.DoubleTensor) #设置tensor的数据类型为doubletensor
x=torch.empty(2,2,3)
print(x)
print(x.type()) #重新输出tensor数据类型
#随机初始化的方式
a=torch.rand(3,3) #产生0-1的shape为[3,3]的tensor数据
print(a)
b=torch.rand_like(a) #产生一个和a的tensor数据类型相同的tensor数据,其数据大小也在0-1之间,如果变大可以利用一定的数据处理
print(b)
c=torch.randint(0,10,[3,5])
print(c)

a=torch.randn(2,5) #产生一个标准正态分布的数据
print(a)
a=torch.normal(mean=torch.full([10],0),std=torch.arange(1,0,-0.1)) #产生一般自定义的正态分布数据大小
b=a.reshape(2,5)
print(a)
print(b)
#torch.full
a=torch.full([2,3],3)
print(a)
b=torch.full([],1) #生成一个标量
print(b)
c=torch.full([1],1) #生成一个dim=1的tensor张量数据
print(c)
print(a.type(),b.type(),c.type())
a=torch.arange(0,10,2) #半开区间,左闭右开,不包含右边的最大值
print(a)
b=torch.range(0,10) #包含右端数据10,全闭区间
print(b)

#linspace/logspace
#(1)torch.linspace(min,max,steps=data number):返回的是等间距的数据,其中左右数据均包括,数据个数为steps,数据间隔为(max-min)/(steps-1)
#(2)torch.logspace(min,max,steps=data number):返回的是10的各个线性空间次方的数值
a=torch.linspace(0,10,steps=10)
print(a)
b=torch.linspace(0,10,steps=11)
print(b)
c=torch.logspace(0,10,steps=11)
print(c)
d=torch.logspace(-1,0,steps=10)
print(d)
#Ones/zeros/eyes
print(torch.zeros(3,4)) #零张量数据
print(torch.ones(3,4)) #1张量数据
print(torch.eye(4,5)) #单位张量数据
#randperm产生随机的索引值
a=torch.rand(2,3)
b=torch.rand(2,2)
print(a,b)
idx=torch.randperm(2)
print(idx)
a=a[idx]
b=b[idx]
print(a,b)

最终实现结果如下所示:

pytorch中tensor张量数据基础入门的更多相关文章

  1. pytorch中tensor张量的创建

    import torch import numpy as np print(torch.tensor([1,2,3])) print(torch.tensor(np.arange(15).reshap ...

  2. pytorch中tensor数据和numpy数据转换中注意的一个问题

    转载自:(pytorch中tensor数据和numpy数据转换中注意的一个问题)[https://blog.csdn.net/nihate/article/details/82791277] 在pyt ...

  3. 对pytorch中Tensor的剖析

    不是python层面Tensor的剖析,是C层面的剖析. 看pytorch下lib库中的TH好一阵子了,TH也是torch7下面的一个重要的库. 可以在torch的github上看到相关文档.看了半天 ...

  4. [Pytorch]Pytorch中tensor常用语法

    原文地址:https://zhuanlan.zhihu.com/p/31494491 上次我总结了在PyTorch中建立随机数Tensor的多种方法的区别. 这次我把常用的Tensor的数学运算总结到 ...

  5. VS2013中Python学习笔记[基础入门]

    前言 在上一节中简单的介绍了在VS2013中如何进行开发Hello World,在VS2013中进行搭建了环境http://www.cnblogs.com/aehyok/p/3986168.html. ...

  6. Pytorch 中 tensor的维度拼接

    torch.stack() 和 torch.cat() 都可以按照指定的维度进行拼接,但是两者也有区别,torch.satck() 是增加新的维度进行堆叠,即其维度拼接后会增加一个维度:而torch. ...

  7. pytorch中tensor的属性 类型转换 形状变换 转置 最大值

    import torch import numpy as np a = torch.tensor([[[1]]]) #只有一个数据的时候,获取其数值 print(a.item()) #tensor转化 ...

  8. PyTorch 数据集类 和 数据加载类 的一些尝试

    最近在学习PyTorch,  但是对里面的数据类和数据加载类比较迷糊,可能是封装的太好大部分情况下是不需要有什么自己的操作的,不过偶然遇到一些自己导入的数据时就会遇到一些问题,因此自己对此做了一些小实 ...

  9. pytorch张量数据索引切片与维度变换操作大全(非常全)

    (1-1)pytorch张量数据的索引与切片操作1.对于张量数据的索引操作主要有以下几种方式:a=torch.rand(4,3,28,28):DIM=4的张量数据a(1)a[:2]:取第一个维度的前2 ...

随机推荐

  1. HTML+CSS—背景图片、图片定位

    设置背景图片格式: background-image: url(img/ic.jpg); 注意点: 如果父容器面积大于背景图片,默认显示该图片整面平铺 设置是否需要平铺属性: background-r ...

  2. ASP.NET Core中的依赖注入【上】

    此为系列文章,对MSDN ASP.NET Core 的官方文档进行系统学习与翻译.其中或许会添加本人对 ASP.NET Core 的浅显理解 ASP.NET Core支持DI软件设计模式,其是一种为了 ...

  3. MYSQL双查询错误1

    一.基础知识 开始讲解MYSQL双查询错误之前,我们先了解一下双查询语句以及需要使用到的几个数据库函数和GROUP BY语句 1. 双查询语句 先了解一下什么是子查询,子查询就是嵌入第一层select ...

  4. C语言:判断t所指字符串中的字母是否由连续递增字母组成。-判断一个输入的任何整数n,是否等于某个连续正整数序列之和。-将一副扑克牌编号为1到54,以某种方式洗牌,这种方式是将这副牌分成两半,然后将他们交叉,并始终保持编号1的牌在最上方。

    //判断t所指字符串中的字母是否由连续递增字母组成. #include <stdio.h> #include <string.h> void NONO(); int fun( ...

  5. 我的 Python 编码规范

    python 文件的组成 为了便于描述,先上一个 demo #!/usr/bin/env python # -*- coding: utf-8 -*- """通常这里是关 ...

  6. Python语言——map/reduce的用法

    Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clus ...

  7. Centos610无桌面安装Docker-安装

    1.必备环境 设定docker源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.rep ...

  8. HTML常用标签效果展示

    HTML常用标签效果展示 一.文本效果 段落1---收到了开发建设看来得更加快乐圣诞节福利肯定是减肥的路上苏里科夫就是打开了飞机都是风口浪尖上的疯狂了大煞风景圣诞快乐的索科洛夫几点上课了关键是低空掠过 ...

  9. 第六周之Hadoop学习(六)

    继续上周开启telnet的过程,这个过程发现win10上运行不了telnet的命令 原因大概在于没有开启telnet服务,从网上下载好telent服务端,安装后继续尝试是否能在win10上使用hado ...

  10. HHR计划---作业复盘-直播第三课

    一,出租车广告: 1,三个点不合格:周期太长了,大而全互联网产品,不符合MVP原则:业务关键点丢掉了:没有业务认知和成长. 2,关键假设: (1)车主有没有需求呀,画像怎么样? (2)车主收入如何,能 ...