tensor 数据类型

# 导入 torch 模块
import torch
# 导入 numpy 模块
import numpy as np

——————————————————————————————————————

生成张量

# 从python数组构建
a = [[1,2,3],[4,5,6]]
t = torch.Tensor(a)
print(t)
tensor([[1., 2., 3.],
        [4., 5., 6.]])
# 从列表构建张量
x = torch.Tensor([[1,2]])
print(x)
tensor([[1., 2.]])
# 生成零张量
z = torch.zeros(1,2)
print(z)
tensor([[0., 0.]])
# 根据随机分布生成张量
z = torch.rand(1,2)  # 均匀分布 U[0,1]
h = torch.randn(3,2) # 正态分布 N(0,1)
print(z)
print(h)
tensor([[0.8609, 0.7623]])
tensor([[-0.6099,  0.1189],
        [ 1.0732, -1.6297],
        [ 1.5443, -0.8227]])
# 查询 tensor 中元素个数
print(x.numel()) # 等价于x.nelement()

# tensor size
print(x.size())
2
torch.Size([1, 2])

——————————————————————————————————————————————————————————————————————

类型转化

x = torch.rand(2,2)*10
y = x.double()
z = x.int()
print('type of x: ', type(x))
print('type of y: ', type(y))
print('type of z: ', type(z))
type of x:  <class 'torch.Tensor'>
type of y:  <class 'torch.Tensor'>
type of z:  <class 'torch.Tensor'>
# CPU 与 GPU 张量相互转化
# 检查是否支持CUDA
torch.cuda.is_available()
True
x = torch.randn(2,2)
y = x.cuda() # 需要 GPU 支持
z = x.cpu()
print('type of x: ', type(x))
print('type of y: ', type(y))
print('type of z: ', type(z))
type of x:  <class 'torch.Tensor'>
type of y:  <class 'torch.Tensor'>
type of z:  <class 'torch.Tensor'>
# numpy 数组 和 torch 张量相互转换
x = np.random.rand(2,2)
y = torch.from_numpy(x)
z = y.numpy()
print('type of x: ', type(x))
print('type of y: ', type(y))
print('type of z: ', type(z))
type of x:  <class 'numpy.ndarray'>
type of y:  <class 'torch.Tensor'>
type of z:  <class 'numpy.ndarray'>
# tensor----> array
x = torch.randn(2,2)
y = x.numpy()
print(type(y))
# array ---> numpy
z = torch.from_numpy(y)
print(type(z))

<class 'numpy.ndarray'>
<class 'torch.Tensor'>
# numpy 与 torch 的转换时非常快的,因为其底层内存是共享的
x = torch.rand(1,2)
print(x)
y = x.numpy() # 不会分配新的内存
y.fill(0)    # 因为内存共享,这个操作会改变 x 的值
print(x)
print(y)
tensor([[0.8027, 0.8068]])
tensor([[0., 0.]])
[[0. 0.]]

张量运算
重点掌握:四则运算, torch.max torch.min torch.mean torch.sum
torch.sqrt 三角函数

x = torch.Tensor([1,2]).view(1,2)
y = torch.Tensor([3,4]).view(1,2)
z = x*y  # 逐点相乘
h = torch.mm(x, y.transpose(0,1))# 矩阵乘法
                                 # 0,1维度相互转换
print(z)
print(h)
tensor([[3., 8.]])
tensor([[11.]])

inplace 操作。所有以“_”结尾的函数表示 inplace 操作,即运算结果直接覆盖原来的Tensor不分配原来的内存。

x = torch.randn(2,2)
print(x)

x.mul(10)   # x 加 10 但是不修改 x
print(x)    # x 加 10 在原来内存上修改
x.mul_(10)
print(x)
tensor([[ 0.0304, -0.6806],
        [ 0.0477, -1.3126]])
tensor([[ 0.0304, -0.6806],
        [ 0.0477, -1.3126]])
tensor([[  0.3038,  -6.8058],
        [  0.4770, -13.1262]])
####### tensor 加法的不同形式
x = torch.Tensor([1,2])
y = torch.Tensor([3,4])
# 方法一
print(x+y)

# 方法二
print(torch.add(x,y))

# 方法三:计算结果储存在 z 上
z = torch.Tensor(1,2)   # 生成1*2张量
torch.add(x,y,out = z)
print(z)

# 方法四: 运算结果覆盖y(inplace操作)
y.add_(x)
print(y)
tensor([4., 6.])
tensor([4., 6.])
tensor([4., 6.])
tensor([4., 6.])

————————————————————————————————————

索引(indexing)和切片(slicing)

# torch 张量的索引以及切片规则与Numpy基本一致
# 索引出来的结果与原结果共享
x = torch.rand(2,3,4)
print(x[1].shape)

y = x[1,0:2,:]
print(y.shape)

z = x[:,0,::2]
print(z.shape)
torch.Size([3, 4])
torch.Size([2, 4])
torch.Size([2, 2])
print(x)
print(z)
tensor([[[0.0231, 0.1160, 0.9725, 0.1994],
         [0.9047, 0.4319, 0.9163, 0.7421],
         [0.3240, 0.9103, 0.0024, 0.9348]],

        [[0.2423, 0.1626, 0.2431, 0.6533],
         [0.9368, 0.0300, 0.1535, 0.0286],
         [0.0796, 0.5773, 0.6786, 0.2632]]])
tensor([[0.0231, 0.9725],
        [0.2423, 0.2431]])

张量变形

torch.view

torch.resize

torch.squeeze, torch.unsqueeze

torch.transpose

# torch.view 可以改变 tensor 的形状,但是必须保证前后元素总数一致
x = torch.rand(3,1,2)
y = x.view(6)
print('shape of x', x.shape)
print('shape of y', y.shape)
print(x)
print(y)
shape of x torch.Size([3, 1, 2])
shape of y torch.Size([6])
tensor([[[0.8635, 0.7824]],

        [[0.5868, 0.0500]],

        [[0.4196, 0.3078]]])
tensor([0.8635, 0.7824, 0.5868, 0.0500, 0.4196, 0.3078])
# torch.resize 是另一个用来改变 tensor 形状的方法,与view不同的是他可以改变tensor的大小
# 如果新规格大于原规格,会分配新的内存空间,如果新规小于原规格,则会保存之前的数据
x = torch.rand(3,1,2)
print(x)
print(x.resize_(8))
tensor([[[0.7427, 0.4825]],

        [[0.5664, 0.1080]],

        [[0.2545, 0.9431]]])
tensor([0.7427, 0.4825, 0.5664, 0.1080, 0.2545, 0.9431, 0.0000, 1.6181])
# tensor.squeeze 和 unsqueeze 主要用于需要减少维度的情况
x = torch.rand(3,2,4)
y = x.transpose(1,2)  # 维度索引从 0 开始
print('shape of x' ,x.shape)
print('shape of y' ,y.shape)
shape of x torch.Size([3, 2, 4])
shape of y torch.Size([3, 4, 2])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 本篇内容参考官方文档自己总结而来仅供自学自查,详细需求请查阅官方文档。 数据类型 张量(Tnsor) 什么是张量?...
    Zimix阅读 7,576评论 0 3
  • TF API数学计算tf...... :math(1)刚开始先给一个运行实例。tf是基于图(Graph)的计算系统...
    MachineLP阅读 3,437评论 0 1
  • 2017年开始,帮自己一个忙, 不再承受身外的目光, 不必在意他人的评价, 从此为自己活, 2017开始,帮自己一...
    菡丹飞扬阅读 224评论 0 0
  • 读前思考与讨论 1、“才能是否可以提升” 我的答案:才能可以提升 2、“没有强大的意志力,是不是就一定无法坚持做完...
    四季海棠花阅读 245评论 0 1
  • 七月,是火红色的 重庆,是火辣辣的 又遇山城,久别的人儿又重逢!! 去年,也是...
    苏涵baby阅读 346评论 0 1