3 Tensor出生-庖丁解牛之pytorch

Tensor是深度学习的基本类型,我们常用的说法有,标量、向量、矩阵如下:


我们常用的表示

标量(Scalar)是只有大小,没有方向的量,如1,2,3等
向量(Vector)是有大小和方向的量,其实就是一串数字,如(1,2)
矩阵(Matrix)是好几个向量拍成一排合并而成的一堆数字,如[1,2;3,4]

其实标量,向量,矩阵它们三个也是张量,标量是零维的张量,向量是一维的张量,矩阵是二维的张量。张量可以扩展到多维。



tensor的创建方法大致分成四类

  • 已经存在的数据构造使用 torch.tensor().
  • 根据形状创建tensor,使用torch.* (见 Creation Ops).
  • 根据已有形状创建tensor 使用 torch.*_like (见 Creation Ops).
  • T创建一个与现有形状不一样的tensor,使用tensor.new_* .

1 torch.tensor构造函数

torch.tensor(data, dtype=None, device=None, requires_grad=False) 
  • data(数组) – 初始化的tensor数据,可以是list, tuple, NumPy ndarray, scalar, 或者其他类型.
  • dtype [torch.dtype]–tensor的数据类型.默认值: if None,
  • device torch.device类型,目前支持两种cpu和cuda,表示该变量存储位置,
  • requires_grad – 是否需要自动求导,默认是False.

1.2 torch支持的数据类型

Data type dtype Tensor types
32-bit 浮点 torch.float32 or torch.float torch.*.FloatTensor
64-bit 浮点 torch.float64 or torch.double torch.*.DoubleTensor
16-bit 浮点 torch.float16 or torch.half torch.*.HalfTensor
8-bit 无符号整形 torch.uint8 torch.*.ByteTensor
8-bit 有符号整形 torch.int8 torch.*.CharTensor
16-bit 有符号整形 torch.int16 or torch.short torch.*.ShortTensor
32-bit 有符号整形 torch.int32 or torch.int torch.*.IntTensor
64-bit 有符号整形 torch.int64 or torch.long torch.*.LongTensor

1.3 torch.device的构造方法

字符串

torch.device('cpu')
torch.device('cuda')
torch.tensor((2,3),device='cuda')

字符串和数字

torch.device('cuda:0')
torch.device('cuda', 0)
torch.device('cpu', 0)

直接使用数字

device=torch.device(0)
torch.randn((2,3), device=0)

1.4 例子

>>> torch.tensor([[0.1, 1.2], [2.2, 3.1], [4.9, 5.2]])
tensor([[ 0.1000,  1.2000],
        [ 2.2000,  3.1000],
        [ 4.9000,  5.2000]])

>>> torch.tensor([0, 1])  # Type inference on data
tensor([ 0,  1])

>>> torch.tensor([[0.11111, 0.222222, 0.3333333]],
                 dtype=torch.float64,
                 device=torch.device('cuda:0'))  # creates a torch.cuda.DoubleTensor
tensor([[ 0.1111,  0.2222,  0.3333]], dtype=torch.float64, device='cuda:0')

>>> torch.tensor(3.14159)  # Create a scalar (zero-dimensional tensor)
tensor(3.1416)

>>> torch.tensor([])  # Create an empty tensor (of size (0,))
tensor([])

2 根据形状创建tensor

目前有如下操作:

2.1 torch.rand

根据size创建[0,1]的随机数tensor

>>> torch.rand(4)
tensor([ 0.5204,  0.2503,  0.3525,  0.5673])
>>> torch.rand(2, 3)
tensor([[ 0.8237,  0.5781,  0.6879],
        [ 0.3816,  0.7249,  0.0998]])
import matplotlib.pyplot as plt
import matplotlib
import torch
%matplotlib inline
N = 4000
a = torch.rand(N)
b = range(N)
plt.figure(figsize=(10,8))
plt.scatter(b,a.numpy(), color='g')
plt.show()
torch.rand[0,1]

2.2 torch.randn

根据size创建标准正太分布的随机数tensor,均值0,方差1

import matplotlib.pyplot as plt
import matplotlib
import torch
%matplotlib inline
N = 4000
a = torch.randn(N)
b = range(N)
plt.figure(figsize=(10,8))
plt.scatter(b,a.numpy(), color='g')
plt.show()
torch.randn 均值0,方差1

2.3 torch.randint

自定义最大值和最小值,根据形状创建随机数

torch.randint(low=0, high, size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) 
size需要一个元组,此处需要注意

例如获取[-150,100]之间的4000个随机数

import matplotlib.pyplot as plt
import matplotlib
import torch
%matplotlib inline
N = 4000
a = torch.randint(-150, 100, (N,))
b = range(N)
plt.figure(figsize=(10,8))
plt.scatter(b,a.numpy(), color='r')
plt.show()
torch.randint[-150, 100]

2.4 torch.randperm

随机获取0,1,...,n-1的组合

>>> torch.randperm(4)
tensor([ 2,  1,  0,  3])

3 根据已有数据形状创建tensor

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容